分类 技术志 下的文章

为什么不用用Go?

本文翻译自 Dr. Dobb's主编Andrew Binstock的文章"Why Not Go?"。

Go是一种对系统原生语言的重要反思,它对C语言做了重大的改善,同时还保持了语言的极简性。

今年早些时候,我们写了一篇有关新兴系统原生(native)语言的文章。这些语言包括D、Go、Rust以及Vala。当时我们承诺将会对这些语言进行 细致的探索。从本周开始,我们将开启一系列对来自Google的新语言Go的探索之旅,该系列共有五部分。不同于以往Dr.Dobb's的教程系列,我们 会在连续的几周内发表这些文章,这样你就可以及时且更快的了解到这门语言了。

与这个列表上的其他语言相比,Go语言对我更加有吸引力。虽然我不是Go语言专家,但我喜欢到目前为止我看到的有关Go的一切。正如你所见到的,我的愉悦 来自于对完备的语言特性选择的欣赏,而不是新语言首次亮相所带来的那种热情(我承认我也很容易受到这种兴奋带来的影响 – 这就是为什么我能识别出与喜欢Go的原因的不同之处)。下面这些特性对我尤其有吸引力:

简单而快捷的编译。Go语言编译速度很快。事实上,它的编译速度如此之快,可以轻松地被当作脚本语言使用。编译速度这么快的几个原因包括它 没有使用头文件;如果一个模块依赖A,而A依赖B,那么当A中发生一个改变时,只需要重新编译A原模块以及A的依赖即可;最后一点,目标模块包含了足够的 依赖信息,这样编译器不再需要make文件。你只需简单地进行主模块的编译,它就会自动编译工程中的所有需要被更新的模块。这是不是很酷呢?

通过多个返回值的错误处理。现今在系统原生语言中有两类主要的错误处理范式:类似C中的返回值,或类似OO语言中的异常。这两种范式都不那 么理想。但在这两者之中,返回值范式更加让人沮丧,因为返回的错误码经常与从函数中返回的其他数据相冲突。Go通过允许函数返回多个值的方式解决了这个问 题。你可以指定一个从函数返回的值代表类型错误,并可以在任意函数返回的时刻对其进行检查。如果你不关心这个错误值,你可以不检查它。无论哪种情况,函数 的常规返回值都可供你使用。

简化的组合(而不是继承)。就像在Java中那样,通过使用interface指定行为,类型可以作为对象的成员。例如,标准库中的io包 定义了一个Writer,该接口指定了一个方法:一个Write函数,以字符数组作为输入参数,返回整型值和错误类型。任何实现了与这个Write方法签 名相同的类型都是io.Writer接口的一个事实上的实现。这个设计优雅地解除了代码中的耦合。它同时也简化了单元测试mock对象的实现。例如,如 果你想要测试一个Database对象中的方法,在标准语言中你需要创建一个Database对象来创建mock,这个对象需要大量初始化和协议实现工 作。在Go语言中,如果这个被测试的方法实现了某个interface,那么你可以使用这个接口创建任意对象,用起来很方便。这样你就可以创建 MockDatabase,它是一个最小对象,仅需实现一些必要的方法以使用这个需要被mock的interface – 无需构造函数,无需新增特性,只要方法。

简化的并发。在Go中并发相当的容易。将关键字'go'放在任意函数前面,这个函数就会在其自己的go-routine(一个非常轻量的线 程)里面运行。Go-routine之间通过channel通信,channel在本质上是一种阻塞消息队列。常见的互斥工具在Go中都具备,但Go语言 通过启动并发任务以及通过channel协作的方式简化了这类操作。

非常棒的错误消息。在我见过的语言中没有哪门语言在输出诊断信息方面能与Go想媲美。例如,如果一个程序死锁了,Go运行时会通知你,甚至可以达到告诉你哪个线程导致这次死锁的程度。编译器输出的错误信息也十分详细和有用。

大杂烩:Go语言还有其他极具吸引力的特性,这里带大家快速浏览一遍:高阶函数,垃圾收集,hashmap以及内置到语言(语言语法的一部分,不是通过库引入的)中的可扩展的数组。

当然,不是所有东西都是彩虹棒棒糖。这个工具仍然不成熟,开发社区规模也很小,但有Google这样的公司作为Go语言的后盾,这两方面不足肯定会被弥补 的。许多语言 – 尤其是D、Dust以及Vala,致力于简化C++以及增加特定特性,这让我感觉它们更像是"带有更好特性的C++",而Go语言,其设计内涵中有一种对 系统原生语言要如何运转的重要的反思。正是出于这种认识,一个去除了许多问题的优雅实现诞生了。即使你没有什么特别的需求考虑去使用Go语言,那么我认为 用你最直接的方式去了解这门语言,你会发现Go的许多特性会让你赏心悦目。Cheers!

知识管理推广难的几点原因

去年在产品线内部尝试了一些知识管理的实践:建立了知识库,初步在产品线内部养成了知识整理和总结的习惯,建立了工作流程与知识库之间的粘性,取得了一定效果。今年年初在事业部内部做了有关知识库实践方面的分享,大家也都认识到这几年我们在知识积累方面上的不足,也都很赞同知识管理的重要性与必要性。会后领导决定建立事业部级知识库,并安排专人负责知识库的维护与推广。

 
于是乎负责知识库搭建的那个部门申请服务器、安装和调试知识库系统,甚至是修改代码以满足我们内部对权限的要求,后续还召开了一次子部门知识负责人会议,以推动各个子部门应用知识库。这样的开头看起来还是蛮不错的。但随着时间的推移,热情经过冷却也渐渐凉了下来。知识库的负责人也变更了,定期的知识管理交流会也不再举行了,仅仅剩下我们的产品线依旧保持着已经养成的热度。
 
万事开头难,确实不假。但究竟是何原因导致出现此种情形呢?近期做了一番思考,想到了以下几点。
 
1、领导意志的持续性
 
最初,知识管理受到了领导的推崇,并做出了部署并使用知识库的决策。但随后领导似乎“忘记”了这件事情,缺少了持续性的关注。这似乎无意中给了大家一个错误的信号:知识管理并非我最在意的事情。领导不关心,下面的人如何行动可想而知。换位思考,我十分能够理解领导们每天的忙碌,毕竟在中国这个激烈竞争的IT市场环境中,摆在第一位的永远是“如何活下来”,所以领导们的确应该将市场、客户等放在头位,这无可厚非。但如果用经典时间管理理论来理解的话,知识管理就是一件重要不紧急的事情,市场、客户关心之余应该得到领导给予地持续关注,否则知识管理就逐渐陷入不重要不紧急的象限中去了。组织的持续成长是需要有知识积累作为保证的,“铁打的营盘,流水的兵”,组织内一批批的人员更迭,甚至若干年后领导们也都已经高升到其他岗位了,留下的也只能是组织运行多年来积累下来的那些知识(技术、经验等)了。因此真正为组织着想的领导是应该给予知识管理持续关注的。
 
2、员工的工作心态
 
说完了领导,说员工。对普通员工而言,最重要的莫过于:把活按时干完,每月都能拿到高绩效奖金,年底拿更多年终奖,来年涨更多薪水。同时,在这个过程中,自己也能成长,翅膀将变得更硬朗,弄不好就飞走了,把一切都带走,不留下一丝痕迹。工作了若干年,后来人甚至不知道你的存在,除了你那日益发出腐朽味道的代码外,你没有给后人留下任何有帮助的东西。很遗憾,我看到的不少人都是这么做的。一些人工作就是当一天和尚,撞一天钟,甚至都不为自己后续的工作考虑,没有总结,没有思考。后续遇到相同的问题时,一切从头来。试想一下,如果在这样的一个群体里,即使搭建出一个知识库平台,又有几人能够使用呢。当然这里仅仅是一个例子,我看到了越来越多的年轻人报着Open和虚心学习的心态,主动应用组织提供的知识平台,认真学习技术、了解业务,并在工作一段时间后,贡献出了高质量的知识,他们意识到了知识积累和总结的重要性,他们从中得到了益处,他们认为自己在工作过程中的收获可能对其他人也很有益处,也会给自己后续的工作带来方便,这样的工作心态是值得赞赏的。如果一个组织内部员工的工作心态均是如此,知识管理推广将十分容易,而且我相信这样的组织将会有更为持久的生命力。
 
3、这个人适合吗
 
有了知识库后,不能放任自流,务必要有专门人管理和推广。如果组织够大,这个人最好专职;如果组织不大,知识管理的工作量不足以饱和,可考虑兼职;但什么样的人合适呢?如果让一个不适合的人来负责知识管理,那就是"搬起石头砸自己的脚",不仅不能扩大知识库在组织内部的作用,甚至还可能让其他人产生“知识库无用”的观点。像我们这样的组织,开发人员占据大多数,没有设立专职知识管理专员职位,大家都是门外汉。我也不是知识管理专家,但我希望组织内有人通过我们搭建的平台逐渐成为知识管理方面的专家。因此我们需要一个其自己就致力于在知识管理领域有所建树的人负责,这样的人有热情、有意愿将组织的知识管理做好,这绝对是做好知识管理的一个必要条件。这个人的需要能让组织以及领导们时刻意识到知识管理的存在以及重要性。如果做不到这一点,那这个人就是一个不合适的人选。
 
 
4、策划和推广有计划吗
 
知识管理是重要不紧急的任务,因此应该做长期计划,分阶段达成目标,无计划、无政府状态的知识管理将会变成一盘散沙。知识库这座大厦的结构是动态的,是始终趋向更满足组织需求而变化和重构的。知识库负责人应定期根据最新需求策划调整知识结构,并在组织内做足推广和宣传,引导大家在正确的位置贡献知识;知识库的新版本升级、新功能的支持都应该让组织内的成员知晓;更重要的是要设定知识管理的阶段性目标,并努力达成,定期组织汇报,用成果打动大家,增加大家对知识库的粘度。
 
5、理论结合实际了吗
 
知识管理是有一套理论做支撑的,我是门外汉,从来没有系统学习过。但我想如果要做好知识管理,理论必不可少。这更多是知识管理负责人的事情。他/她应该主动学习这方面的一些理论,结合实践,搞好知识管理。我想知识管理想要上一个台阶,上一个档次,这一步必不可少。
 
能想到的原因上面已经列了出来,但如何解决呢?人的问题,非技术问题,难啊!不过我觉得也许最关键的一步应该是选好一个合适的知识管理负责人。这也是下一步我要力促的事情。
如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言进阶课 AI原生开发工作流实战 Go语言精进之路1 Go语言精进之路2 Go语言第一课 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com
这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats