Posts List
  1. Ruby
  2. Golang
  3. 最后

Ruby & Golang

Ruby

松本行弘(Ruby的作者)被问及为什么要开发Ruby,”因为它给我带来了快乐“

刚接触Ruby的时候,深深了被Ruby的简洁性、优雅性所吸引。很喜欢Ruby的设计理念,注重人性化,而不是一味从机器的角度设想
最简单Hello World只需要18个字符,代码看起来很清爽,其他语言100行干的事情,可能Ruby50行就可以,甚至更少

1
puts 'Hello World'

当时觉得程序员就应该是使用高效的工具,高效的做事,而Ruby就是一个这样的工具。Rails有个宣传视频,10分钟内写出一个blog,在之前前后端分离还不是很流行的时候,使用Rails开发Web,开发效率真的非常高。当然现在开发效率也可以,只不过和其他语言的框架差距没有那么大了。

Ruby的特点

  • 方法定义、调用可以省略括号,这让Ruby非常适合定制DSL
  • 完全面向对象,连操作符(+-*)都是对象的方法
  • 非常高的动态性,程序员可以动态的定义一个Class,动态的改写任何一个Class(包括标准库)的方法等等

大部分Rubyist都喜欢追求代码的优雅性,追求DRY,利用Ruby提供的动态性,用着各种奇淫技巧去抽象代码。动态性是一把双刃剑,它确实很好的帮助了程序员去抽象代码,但同时也让他人去理解其实现逻辑变得有些困难。我曾经多次想把Rails完全搞懂,但在Rails的高度抽象性与动态性这两座大山面前,不得不放弃。举个例子,如果你想通过打断点的方式从record.save开始,去调试model的callback相关的问题,那真的一种痛苦。

Golang

有着C的基础,Go是一门很容易上手的语言,简单,内置协程,易于高并发。Go秉持的是KISS原则(KEEP IT SIMPLE , STUPID),从优雅性上来讲,可以说和Ruby是两个极端,Go是傻瓜式的简单。但受够了Ruby的各种魔法般的技巧,Go这种傻瓜式的简单也有一番风味。

Go也有一些地方让人诟病的地方:

  • error的处理:习惯的Exception的处理方式,最开始确实很不适应,每个调用都判断error一次,写起来繁琐而不优雅,写多了习惯就好了
  • 没有三元表达式:确实难受,只能忍着
  • 没有泛型:虽然有interface{},但是interface{}失去了编译时期的类型安全,好像2.0会引入泛型

最后

Ruby带给我的更多的是编程思想上的提升,在学习Go之前,我追求的更多是如何写出逻辑清晰,易于扩展,性能高的代码上。Go的简单、静态以及实现了自举,可以很方便的去研究Go的内部实现(slice、map、channel,并发安全,GPM并发模型,GC,内存分配,内存模型等等),对编程语言有了一个更深层次的理解。
Ruby带给我了高效优雅实现业务功能的快乐,Go带我了知其然知其所以然的快乐。