感觉很不错的话--不仅仅是技术 

   在一个blog上看到一篇讨论技术方面的文章:从C# 3.0到F# 
http://www.cnblogs.com/allenlooplee/archive/2008/07/25/1251631.html
  暂且不说技术讨论的怎么样,也没太大的静心去好好看里面的代码和技术,摘点一些很有道理的,感觉非常不错的文字,做人,做事都适用。
 
 
引用内容 引用内容

缘起 

当你看到这篇文章的标题时,你有什么感觉?是不是很想脱口而出:"到底搞什么飞机啊,我C#还没来得及用好,现在又搞个F#,还让不让人活啊?"《程序员修炼之道》曾经建议我们"learn at least one new language every year",但Gustavo Duarte却对这种建议提出质疑,并宣称"learning new programming languages is often a waste of time for professional programmers"。面对这种争论,你可能会显示出某种理性:除非我有需要(学习新的语言),否则我认为够用就可以了。那么,你什么时候会有需要?回想一下你的项目经历,是否发现,有权提出这种需要的往往不是你,而是你的项目,只要项目有需要,即使是老掉牙的语言你也得学。根据马斯洛的需要层次理论,如果你的项目已经让你忙得一塌糊涂了,那么你根本不会有闲情和兴致学习新的语言,而在现今这个讲求快速见效的社会里,或许只有专门研究语言的人才支付得起学习新的语言的代价了,但我并非专门研究语言的人,至少现在不是,那么,我为何要学习新的语言呢? 

我曾经在杰拉尔德·温伯格(Gerald M. Weinberg)的《咨询的奥秘——成功提出和获得建议的指南》里读到一个有趣的"锤子法则"(The Law of The Hammer): 

在圣诞节收到锤子做礼物的孩子会发现每样东西都需要敲打。 

读完上面这句话之后,你的脑子里想着什么?或许你已经猜到我想说什么了,工具在为使用者带来便利的同时也会约束使用者解决问题的思路和方法,编程语言直接体现了对问题的抽象和表达,不同范式的编程语言则协助程序员从不同的角度把握问题,这也正是我学习新的语言的主要原因。要有持久的学习行为,学习动机应该是指向内部的,其道理和《七个心理寓言》的"动机的寓言:孩子在为谁而玩"所说的是一样的。那么,我又为何选择F#呢?其实,这完全是因为C# 3.0,我们知道C# 3.0向函数式编程借鉴了不少,所以在学习C# 3.0的时候,我突然萌生了想了解函数式编程语言的念头,后来,在一次偶遇中,我邂逅了F#。在学习F#的过程中,我发现许多C# 3.0的新功能的"影子"(有人说C# 3.0的新功能是从F#那里借鉴过来的,是真的吗?),于是萌生了写下这篇文章的念头。



  这一段是这篇技术文章的一个引子,一看这段话,我就有了继续看下去的欲望,至少里面有几点是很吸引我的:
  1、当你看到这篇文章的标题时,你有什么感觉?是不是很想脱口而出:"到底搞什么飞机啊,我C#还没来得及用好,现在又搞个F#,还让不让人活啊?"
   第一句话,说的很实在,我想这个是很多程序员都有的感慨了,现在技术日新月异,一天不上网差点资料,学习下,感觉自己就跟这个技术大流有距离了。但是无边的新东西需要学习,迷茫啊,也很无奈。
  2、有权提出这种需要的往往不是你,而是你的项目,只要项目有需要,即使是老掉牙的语言你也得学。
   这个是对是否需要学习新语言的一个很有道理的回答。项目实际的需要,项目要你干嘛,你就必须干嘛,不会的就学习。这个是这段时间做的事情中比较有体会的一个东西。在这几天做的交通集团的项目中,不少地方需要用ActiveX控件才能实现的功能,没办法,就是必须用ActiveX,好在搭档这方面熟悉,控件都是他写的,我只负责使用。脚本的应用,不可避免的,这几天一直在恶补Jquery,(当然不能干造轮子的工作,有可以利用的先用了再说)。
  3、"锤子法则"(The Law of The Hammer): 
   在圣诞节收到锤子做礼物的孩子会发现每样东西都需要敲打。
  这个算是这段话中最有意思的一句了,也很有哲理性。
  我看到这句话的第一个想法是:孩子总喜欢希望他的礼物是最好的,万能的。
  作者想说的却是:工具在为使用者带来便利的同时也会约束使用者解决问题的思路和方法
  后面马上更深入的说到了为何要学习新的语言:编程语言直接体现了对问题的抽象和表达,不同范式的编程语言则协助程序员从不同的角度把握问题,这也正是我学习新的语言的主要原因。

  这么精彩的开场白,让我止不住往下看的愿望,语言的枯燥实在让我失去了不少的耐心,这几天一直很忙,看这种技术的文章不是很适合时间,所以大概浏览了一遍,更多的是寻找让我触发思维的词句:


  
引用内容 引用内容

如何外包逻辑? 

有一次,我和两个朋友到东方既白吃饭,选餐的时候,其中一个考虑了很久,终于发话了:"椰香咖喱牛肉饭可不可以不要椰香?"服务员看着我的朋友,非常不好意思地说:"这是不可以的。"看到服务员的表情,我猜她应该是苦于不知如何向一个12岁的小朋友解释"烧饭的工作遵循了一套标准化的流程,这个流程是不能随意更改的"。此时,我的朋友大概在想:同样的钱,不能加东西可以理解,为什么连减东西也不可以呢?虽然他最后还是选了椰香咖喱牛肉饭,但我猜他心里肯定觉得东方既白做得太呆板了。试想一下,如果你打算使用我提供的Sort方法排序books2数组(参见代码11),却发现这个方法只接受一个数组作为参数,你肯定会问:"我如何告诉这个方法我要根据价格进行排序?"接着,我告诉你:"不好意思,这是不可以的,这个方法会自行选择合适的排序依据。"此时,你会有什么感觉? 

无可否认,我们已经进入了一个个性化的时代,用户不再像从前那样满足于你所提供的普遍适用的标准化软件,他们希望你的软件是可配置的,必要时还能够扩展,也就是可以满足他们的个性化需求。然而,把逻辑外包出去并不只是为了满足用户的个性化需求,为什么这样说?试想一下,你可不可以写出这样一个Sort方法,每次调用时都能"猜中"用户的排序依据?很明显,当我把books2数组传给Sort方法时,如果我不说,它不可能知道我想按书名排序还是按价格排序,是升序还是降序。换句话说,把逻辑外包出去其实就是把这种不稳定的因素封装起来,再转嫁给用户,然后美其名曰"用户参与",当然,由于用户认为你不是把麻烦抛给他,而是为他带来灵活性,于是造就了"双赢"。 

 

 
 这个又是本文的一个精彩之处。
  这个让我想到了在做项目的时候,开发人员和客户之间的一个关系。经常会遇到这样的情况:客户提出了一个需求,但是在开发人员看来是比较不可思议的,比如客户不会去考虑系统的使用环境,限制条件之类的问题,他只希望你按照他的想法实现,却忽视了一点,他在使用的东西是运行在计算机上的。就好比故事中作者的那位朋友,他忘记了“椰香咖喱牛肉饭”是必须加椰香的,要不然为何不直接叫咖喱牛肉饭?
  但反过来看一个问题,我们做的系统是做个客户的系统,是要客户自己用的,在满足客户的需求上,是否该认真考虑用户的建议呢?如何更好的满足用户提出来的一切?或者换种狡猾的做法:外包逻辑。美其名曰"用户参与",把一些事情丢给用户去做,或许也是一种智慧。
  

  其他的不多说了,难得有心情一口气打不少的字:)
 


文章来自: 本站原创
引用通告地址: http://www.fenglog.com/blog/trackback.asp?tbID=350
Tags:
评论: 3 | 引用: 0 | 查看次数: 980
  • 1
Allen [2008-07-26 06:59 AM]
缘起那里短短两段话读起来感觉很快,但它是我从早上10点写到晚上7点,改了N次了,呵呵~~~(Allen Lee)
随风 [2008-07-26 02:39 PM]
To:Allen
 呵呵,您可真有耐心啊,佩服
Steven [2008-09-21 04:12 AM]
不愧是搞程序的,真有耐心,哈哈
  • 1
发表评论
昵 称:
密 码: 游客发言不需要密码.
验证码: 验证码
内 容:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 关闭 | [img]标签 关闭