开始之前先吐槽两句,房东的网络真坑,不停地断网。不过,也正因为此我才有足够的时候去收拾一些想法,想想一些想要做的东西。可以静下来,好好思考也算是一个难得的机会。

说说设计

星期四在卿的帮助下,拿到了Photoshop的License,我想我已经重新收拾一下那些关于设计的想法。

关于设计的书似乎已经有很多了,总以为自己缺少的是对于色彩的理解,重新看了下《写给大家看的设计书》,发现原来不是这样子的。

编程需要不断地实践,设计也需要不断地实践,而色彩在这过程中也是如此。

工作时,我们对一段代码不满意的时候,我们会对他进行重构、重写,像打磨一件艺术器一样。

大多数设计人员并不是使用一种科学的方法来选择颜色,而只是进行试验,反复尝试,直到发现他们认为让人满意而且有效的结果。

上面那句话是来自于《写给大家看的WEB设计书》,两句话看上去有如此多的相似。

风格与练习

以爱好为主的朋友圈里就三种人,写作的、画画的、编程的。以自己的喜好建立了自己的小圈子,除上之外便是自己的同学了。偶尔也会有聊聊设计,画画的时候:

  1. 有意无意间和我姐(一个打算开咖啡店的设计师)聊到了设计——对于当前的我来说,更多的是做一些设计,做一些自己风格的设计。

  2. 让我想起身边一位手绘不错的程序员说,临摹,在模仿中形成自己的风格。

  3. 一个天津美院的朋友告诉我,多加练习,慢慢地就能画自己的想画的。

  4. 一个程序写得不错的美术学生——我想去游戏公司,因为可以直接上手写游戏。

最后大家说要有自己的风格,而在那之前需要的是勤加练习。

《写给大家看的设计书》强调四个对比,重复,对齐,亲密性。想起中学课本上关于诗词的那些话,对仗工整等等。

自己的风格就是要有自己的设计思想,从哪里开始,从哪里结束。设计和写作有着同样的过程,只有自己去练习创作,才会有自己的风格,自己的模式。

一群人总结起来那么几个模式,最后归到设计模式,于是我们说说编程。

谈谈Ruby

最近正在听公司的关于Ruby Workshop,和Java一样作为我厂的两大阵营。遗憾的是我在这两个阵营之外,作为一个经常写Javascript的Pythoner。其实今天我是想吐槽Ruby这门语言,作为一个Ruby的门外汉(写过很多Ruby代码,但是不觉得能写好)。

Ruby不适合外人

总会有这样的人,会说不喜欢你就滚,比如linus。在这里我没有黑他的意思,我是想说他是对的。Ruby的很多程度上受益于ROR,只是最近已经不再那么受欢迎,似乎是因为代码效率引起的,或者说已经有了更好的方案来替代。

我猜还有一部分是因为不易外人阅读。

今天我在写一份Ruby Workshop的作业,一开始我写的是这样子的,这一定会被人说成不像是Ruby的风格,看起来就是将代码从Python翻译到Ruby过来的,翻译到Java也不会太难。

class Fixnum
  def palindrome_below(base)
    palindrome_match = []
    num = self - 1
    (1..num).each do |i|
      if i.to_s(base) == i.to_s(base).reverse
        palindrome_match << i
      end
    end
    palindrome_match
  end
end

至少我们应该把if..end

      if i.to_s(base) == i.to_s(base).reverse
        palindrome_match << i
      end

变成类似于

条件 ? 这个 : 那个

我们还可以each用select代换,于是最后变成了这样子

class Fixnum
  def palindrome_below(base)
    (1..self - 1).select{ |i| i.to_s(base) == i.to_s(base).reverse }
  end
end

看上去就是Ruby的风格,我花了几十分钟才将上面的其他语言的代码,变成了Ruby写的代码。

然而,我猜大家都会喜欢这个语言的,总的来说似乎很容易读懂。

但是要是我要换到另外的语言呢?我们需要一个Ruby专家 : 同时又是另外一个语言的专家。

写起代码来越方便,意味着要么编辑器做了很多事,要么编译器做了很多事。喜欢Ruby的人是在享受编程的乐趣,还是在享受语言的乐趣,总让我觉得他们把Ruby写成了Perl。考虑一下编译器,考虑一下不懂Ruby的人。

所以我猜,喜欢Ruby的人多半会很自恋

你们说呢?

其他

最近我正在忙于写 墨颀CMS

如果你想看看上面的代码,请猛击https://github.com/gmszone/ruby_codekata