gaoxiang

专注于.NET技术

博客园 首页 新随笔 联系 订阅 管理
记不得在哪里看过这句话,“当你拥有一把用得顺手的锤子,就会认为全世界都是钉子”。所有的事情、所有的问题,你都尝试用这把锤子去解决。很多情况下,常常,这把锤子解决不了问题,或者说,有更好的工具来解决手头的问题。比如,将钉子从木头中取出来,使用起子会更有效率、更省事。

    编程语言,比如C#,就是我们手上的锤子;而由此语言而形成的思维方式、思考习惯更是我们头脑中一把无形的锤子。这是好事、也是坏事--好事在于我们至少有一把锤子,坏事在于我们常常因为手中的用了顺手的锤子而忽略了其它工具。

    我曾经在广州的一个公司建议我所在部门的经理将AOP技术应用到我们手头的项目中来解决很多AOP擅长而OOP不擅长的事情,部门经理告诉我说,“AOP能做好的,OOP都能做好,比如你说的日志记录,在每个需要记录的地方,加个函数调用就可以了啊,何必使用AOP把事情搞的那么复杂”。
    我曾建议某个熟练C的程序员可以尝试了解一下C++,得到的回答大概如是,“C++能做的,C都能做,C++的对象可以使用结构和函数指针来模拟,多态可以使用基于函数指针的表来模拟”。可是了,这个熟练的C程序员从来都没有这么模拟过。他真的还有可能步入面向对象世界的门槛吗?
    我曾建议某个熟练的C++程序员尝试了解一下C#或Java这样的语言,得到的回答大概如是,“C#和Java能做到的,C++都能做到,而且使用C++能对底层有更好的控制权,而且效率更高!”我又问他,“既然是为了更多的控制权和更高的效率,为什么不直接使用汇编或C了?”他没有回答。日后,他仍然使用着MFC快乐而低效地创造着很多似乎运行的并不高效的程序,他依然很满足很快乐。再当他和别人说到C#和Java,“那些是什么东西,我从来不用它们!”。

    如果,我们不能暂时放下手中那把帮助了我们许多却又限制了我们许多的锤子,我们就永远不可能拿起其它的工具(思考方法)来更有效的解决问题,也永远不可能体会到其它工具(思考方法)的精妙所在!就像上面的那个经理,对于AOP的理解,再过10年,恐怕仍然也不会深入一点点。

我们不愿放下手中那把顺手的锤子,可能是因为
(1)我们已经深深的爱上这把锤子,对其它的工具都没兴趣
     网上大把的口水战,像,C#和C++哪个好?Java和.NET哪个有前途?这些口水战的斗士们,支持.NET的你对Java的世界了解多少了?支持C++的你对C#又了解多少了?我们经常把自己关在井底观望着头上巴掌大的一片天空,然后对看不到的世界妄加论断,却始终没有勇气跳出井去了解一下我们不熟悉的更广阔的世界。
    一个真正的智者,不在于它掌握了哪些编程语言、哪些平台,而在于他的思维方式、思考方法,在于他开阔的胸襟、不固步自封的人生态度。功夫练到最后,都是练内功、练个人修养,真正的高手,飞花落叶即可伤人!

(2)我们已经没有时间没有精力去学习新的工具(新的思维方式)
     这个理由的缘由仅仅在于我们的懒惰和固步自封!

    走出去学习吧,不断地走出现在的那口井、并且不断的学习才有出路,谁叫你选择程序员这个职业了。

(2006.04.10 Appendix)我很抱歉,我的文字让很多人误解了我的意思,我的本意并不是要大家去学习很多编程语言,而是建议大家从现在的思维模式、思考方式中走出来,去看看外面的世界!比如,你一直是面向过程的思维,可以了解一下OOP、AOP,你一直是使用静态的语言工作(如C++、C#),可以了解一下动态语言(如Python),你一直从事C/S开发,可以去了解一下B/S,你一直在Windows上工作,可以去了解一下Linux,反之亦然。扩宽我们的视野,无论如何,对我们的成长是有帮助的。当然,这些的前提是,你必须静下心去研究和体会(这是所有技术人员的必备的基本素质),要知道哪些东西是浅尝的,哪些是需要深究的。不要无缘无故的排斥、反感什么技术,不要无缘无故的追捧什么技术。
    其实我最想强调的是这一点:“功夫练到最后,都是练内功、练个人修养,真正的高手,飞花落叶即可伤人!”思想狭隘者、固步自封者,很难成为真正的高手。

Feedback

# re: 当你拥有一把用得顺手的锤子  回复   

2006-04-09 18:05 by 自由、创新、研究、探索……
写的非常好,非常赞同你的观点。

# re: 当你拥有一把用得顺手的锤子  回复   

2006-04-09 18:11 by 深渊野鱼
:)
人微言轻

新技术有它的优越性,但是经理人考虑的会多一些。
稳定性,高手可替代性,复杂度等等。
很多时候,我们想象中很美好的,实际上不一定是最美好。
我们不能让只会用大刀的人拿着一把小刀去冲锋。
而且新技术会有一定的风险,利益永远是第一位,其次才是新技术带来的变革的。

# re: 当你拥有一把用得顺手的锤子  回复   

2006-04-09 18:15 by 小新0574
学习使用一把新的锤子也是需要成本的,而且往往是你需要者把新锤子的时候才会想到去学用这把新锤子。
还有一种情况就是,一把锤子还没用熟,就去学用另一把锤子。

# re: 当你拥有一把用得顺手的锤子  回复   

2006-04-09 18:30 by Sheva
.NET is not the hammer, and everything else the nail, just right tool for the right job.

Sheva

# re: 当你拥有一把用得顺手的锤子  回复   

2006-04-09 19:29 by Dflying Chen
@小新0574
同意!人们大都喜欢与别人吵架以证明自己的强大,而不是默默的自己钻研去真正学习。

# re: 当你拥有一把用得顺手的锤子  回复   

2006-04-09 20:58 by vgsdf
走出去学习吧,不断地走出现在的那口井
---------------------
我见过很多啥都会一点皮毛,侃起来显得很博学,但实际上没一门深入研究的家伙。也许就是因为每口井他都只下去一点点,看看就走出去了

# re: 当你拥有一把用得顺手的锤子  回复   

2006-04-09 21:31 by bytes
楼主强调的原因也是方法多样性的原因, 没有对错, 只是各种方法有各自存在的原因,
相比较,解决问题才是最重要.

# re: 当你拥有一把用得顺手的锤子  回复   

2006-04-09 23:16 by cic_wxf
你说的不是一点道理没有,可是现实中像这样办并非易事。
有两个难关无法超越:
1、无论你用什么方法去实现,你必须得会,会的前提是需要花时间去研究,这段时间应怎样分配,工作还是业余。
2、学习一门语言要求精,按照你的理论,估计几门语言都没学精,最终的问题什么语言也解决不了。
3、整个项目用什么语言开发,不是程序员决定的,程序中只有少量代码不是项目的主编语言,公司项目以后的维护又得专门招聘一个专人,boss是不会答应的。

# re: 当你拥有一把用得顺手的锤子  回复   

2006-04-09 23:16 by cic_wxf
你说的不是一点道理没有,可是现实中像这样办并非易事。
有三个难关无法超越:
1、无论你用什么方法去实现,你必须得会,会的前提是需要花时间去研究,这段时间应怎样分配,工作还是业余。
2、学习一门语言要求精,按照你的理论,估计几门语言都没学精,最终的问题什么语言也解决不了。
3、整个项目用什么语言开发,不是程序员决定的,程序中只有少量代码不是项目的主编语言,公司项目以后的维护又得专门招聘一个专人,boss是不会答应的。

# re: 当你拥有一把用得顺手的锤子  回复   

2006-04-10 08:10 by INRIE
写得不错,赞同这种观点

在有熟悉的某口井前提下"走出现在的那口井、并且不断的学习",不仅能学到新知识,也能对现有知识理解更透彻.

# re: 当你拥有一把用得顺手的锤子  回复   

2006-04-10 09:14 by yuran
我非常同意搂主的观点,不过我想补充一点:

学习语言要求精。

如果你现在选择了C#, 那我想你再学java的时候就会很轻松,当然如果你只准备了解一点,那你还是不要学了。


如果你还说这不可能,那我只能觉得你不是合格的程序员,如果你觉得时间不够,那谁叫你选择了程序员这个职业?

# re: 当你拥有一把用得顺手的锤子  回复   

2006-04-10 09:25 by gzj
***********************************************
我个人猜测发这个帖子的人年龄小于30岁。
我认为在30岁之前的人要多学习,多了解新的技术。 30岁后有点悟性
的人都基本上掌握了编程之道, 不仅锤子用的很顺手,而且还可以用这
锤子去制作与创作新的锤子。 当然不用学习新的编程语言了。 最多就是
学习新的思想。 所谓·30以后不学艺·就是这个道理。 要辩证地看到
活到老学到老这句话。 否则就会始终跟着别人走。 ***********************************************


# re: 当你拥有一把用得顺手的锤子  回复   

2006-04-10 09:27 by tototo
其实就是一个问题,就是成本问题,学会新的东西来实现旧的东西也很容易实现的功能,而且也不能带来实质性的好处。这亏本的买卖没有人愿意做的。

在经理那,他并能因为新技术能使项目进程加快,而且还增加了很多风险。
在技术人员那,他也并不能用新技术获取更多的利益。所以6666

# re: 当你拥有一把用得顺手的锤子  回复   

2006-04-10 11:08 by aspnetx
一个真正的智者,不在于它掌握了哪些编程语言、哪些平台,而在于他的思维方式、思考方法,在于他开阔的胸襟、不固步自封的人生态度。功夫练到最后,都是练内功、练个人修养,真正的高手,飞花落叶即可伤人!

说的确实很有道理

但是我觉得只是看清了事物的inside,没有看清楚what's behind

# re: 当你拥有一把用得顺手的锤子  回复   

2006-04-10 11:15 by liugod
现在没什么 时间看新语言,其实多看看设计模式,企业模式一类的关于编程思想的书好点,语言对到达一定水平的人来说,可以忽略了。

# re: 当你拥有一把用得顺手的锤子  回复   

2006-04-10 16:45 by 网上购物
呵呵,说的挺有道理!

# re: 当你拥有一把用得顺手的锤子  回复   

2006-04-10 19:37 by 丁丁
我到和zhuweisky观点相反,当你有一把锤子的时候,你就要看什么砸什么,不然你拿锤子干什么?你有了C#就要完全发挥C#的功用,做出良好的组件,有了VB你就要快速开发出界面,C++你就做点开创性的,核心的技术,喜欢自己的工具本身就是精通的表现,会一堆工具的程序员不一定是大师,但开发出任何一个知名应用的程序员,有谁会不认为他们是大师呢?

做企业开发的人往往觉得自己没有做过什么知名应用,所以才特别喜好抱一堆工具吧?

# re: 当你拥有一把用得顺手的锤子  回复   

2006-04-10 21:02 by 装配脑袋
我比较赞同楼主。多学点并不会变得泛而不精,相反你会发现那些最为成功和永恒的精华往往是多类技术共同的部分,学得越多越能领会到超越工具/平台的那些更本质的东西。
此外新技术不是你觉得要用的时候才学,而是你若不学就永远不知道你能否用上。这一直以来就是我所坚持的观点。

# re: 当你拥有一把用得顺手的锤子  回复   

2006-04-11 09:37 by 8686
兵器是练武人发明的,可是练武人却没有看到火药的威力。关键是,现在的程序开发语言都是厂商开发的,中间多多少少缺少些什么,要是有一个纯粹开源,共享的,至底而上的属于全部开发人员的开发平台该多好了

# re: 当你拥有一把用得顺手的锤子  回复   

2006-04-11 09:52 by 基点项目师
# re: 当你拥有一把用得顺手的锤子 回复
2006-04-10 19:37 by 丁丁
我到和zhuweisky观点相反,当你有一把锤子的时候,你就要看什么砸什么,不然你拿锤子干什么?你有了C#就要完全发挥C#的功用,做出良好的组件,有了VB你就要快速开发出界面,C++你就做点开创性的,核心的技术,喜欢自己的工具本身就是精通的表现,会一堆工具的程序员不一定是大师,但开发出任何一个知名应用的程序员,有谁会不认为他们是大师呢?

做企业开发的人往往觉得自己没有做过什么知名应用,所以才特别喜好抱一堆工具吧?

---------------------------------------------------

做企业开发的人,关注的是不同的应用,我们学程序为了什么?技术的追求是一方面,更多的是追求生活,满足生活的需要,所以,不管怎样,无奈总是充斥了这个社会
posted on 2006-05-18 14:36  S孤单一吻S  阅读(206)  评论(0)    收藏  举报