我也想对广大程序员说一些话

今天上来就看到头条《想对广大程序员说的一些话》,作者的观点还是有很多可取之处的,只是针对博客园的目标群,我觉得有必要谈谈我的观点。

 

在技术的路上,我一直认为就如同金庸小说中的大侠一样,要内外兼修。光有内功没有外功,虽然很厉害,但略显粗重;光有外功没有内功,则属于花拳绣腿,中看不中用。

 

那么在技术上,什么是内功?什么是外功呢?我认为内功就是思想层面上的东西。在当前时期,针对广大程序员,其实就是面向对象的思想。但至于什么是面向对象思想,这个东西很空泛,而且本身思想层面上的东西,如果强制使用语言表达出来,或多或少都有些变味,所以只能自己体会了。如果真要说点什么,那么我的理解就是以人的思维方式去思考系统的做事方式。在思想成型之后可以升华到模式思维,这时候看系统就能直观并且自然的看出该使用什么些模式来解决问题,并且能根据自己的需要创建新的模式。外功就是语言,思想最终需要落实到编程语言上,知道如何使用语言来实现思维层次上的东西,这是外功的修炼。

 

至于新技术、新框架,他们的出现无非就是为了解决目前编程模型中的一些问题。他们的不断更新就是不断的为解决问题提供方便。因此,当内功修炼好之后,看看新增的特性,应该就能对新的更新理解的八九不离十。而外功的修炼,则可以结合内功来创建自己的技术和框架。

 

至于C,C++,数据结构等这些,个人认为是锦上添花。注意,这里是对广大程序员说的,因为对广大程序员来说,都没有必要重复制造轮子的必要。所以,我认为学习技术应该是两方面一起着手,一部分是面向对象的分析和设计,这部分与语言无关,是属于内功的范畴。另一部分就是选择一个合适的面向对象的语言,精通其语法,搞清楚编程模式和各类关键字的使用含义,了解如何最大化去发挥语言的效率和生产力。

posted @ 2010-04-29 16:07 阅读(2063) 评论(17) 编辑 收藏

 回复 引用 查看   
#1楼2010-04-29 16:15 | 壮志      
观点还是比较中肯的
 回复 引用 查看   
#2楼2010-04-29 16:39 |       
这个比较赞同。

内功 = 思想。我个人就觉得重构、设计模式、UML、这些就是内功。

c c++都不算是内功,他们算是特定领域的工具。

如果是软件工程的人,没有读过以下三大著作的,基本上没有说话的权利了。(如果学文学的没有读过中国四大名著一样)

Craig Larman, Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development(Third Edition),Addison Wesley Professional, 2004

Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley, 1995.

Martin Fowler,Refactoring:Improviving the Design of Existing Code.MA.:Addison Wesly Longman,1999

以上都是我们以前必修课,一定要读英文原版。

 回复 引用 查看   
#3楼2010-04-29 16:58 | 卡通一下      
内功究竟是什么呢?我觉得应当是积淀,是多年来在开发过程中的思考与感悟。

这种内功并不是专指某项技术,是一种感觉、一种自信、一种把握...


 回复 引用 查看   
#4楼2010-04-29 17:05 | 星球人      
@卡通一下
引用卡通一下:
内功究竟是什么呢?我觉得应当是积淀,是多年来在开发过程中的思考与感悟。

这种内功并不是专指某项技术,是一种感觉、一种自信、一种把握...


赞同~

 回复 引用 查看   
#5楼2010-04-29 17:23 | 林博然      
支持老大~!
 回复 引用 查看   
#6楼2010-04-29 17:32 | 吕宗宇      
就一个程序员 还总是内功外功的 这些年就讨论这个问题了
要内功 你不如去做汇编

 回复 引用 查看   
#7楼[楼主]2010-04-29 17:46 |       
@
我的书跟你的有点不一样,如果说三本书的话,我首推Eric Evans的《领域驱动设计》,再是老马的《企业应用架构模式》,最后是《设计模式精解》。

 回复 引用 查看   
#8楼[楼主]2010-04-29 17:48 |       
@吕宗宇

又一个看的一知半解的。

 回复 引用 查看   
#9楼2010-04-29 20:11 | 酥饼儿      
强力挺你~~~~!@@@@
 回复 引用 查看   
#10楼2010-04-29 22:49 | 风乱发      
看来我 要反省了
 回复 引用 查看   
#11楼2010-04-29 23:20 | assiwe      
引用辰:
这个比较赞同。

内功 = 思想。我个人就觉得重构、设计模式、UML、这些就是内功。

c c++都不算是内功,他们算是特定领域的工具。

如果是软件工程的人,没有读过以下三大著作的,基本上没有说话的权利了。(如果学文学的没有读过中国四大名著一样)

Craig Larman, Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development(Third Edition),Addison Wesley Professional, 2004 ...

书只不过是书,把看过一本书当成在某个领域的必要条件只能说明你很弱.而且外国做文学的人可以说大部分都没读过四大名著.

 回复 引用 查看   
#12楼2010-04-29 23:28 |       
@assiwe

跟我玩读书无用论?

可是非常不好意思,这3大著作就是必要条件。如果您不是做软件的,纯粹5毛党,那大家也没啥交叉点,没什么可以讨论研究的。

如果您是做软件写代码的,可以先看过再发言。



反正闲着蛋疼,跟你侃侃。

考过GRE,学过新概念4,里面不少文章论述过人类文明发展。

书是什么。书是人类文明系统的积累。人类最伟大的发明是什么?文字,能够让上一代的知识被下一代使用。否则人类和猩猩一样,新的一代重复着上一代的错误。


那么我刚才说的3本书,基本上是面向对象领域的经典著作。其他所有的Action in XXX, essential XXX 都是特定领域的知识,学不学无所谓。

如果再加,还包括了code complete1,2。不过跟你说也废话。你连三大著作都没看过,基本上只能完成面向过程的代码,没有架构能力和设计能力。

 回复 引用 查看   
#13楼2010-04-30 10:42 | huankfy      
@
只能说你是个nb
拿你的必修课书籍做圣经,说别人没看过这些书怎么怎么样
适合你的书,不一定适合别人。可能你觉得一本书里面一个观点很sb,但对别人来说,可能是醍醐灌顶的感觉;你觉得很nb的观点,别人可能觉得这观点很没价值

 回复 引用 查看   
#14楼2010-04-30 11:59 | 卡通一下      
读书无用论是上个世纪的说法!

书是进入天堂的阶梯;也是下到地狱的通道;或是把你带入迷宫的蜡烛...

花时间找本好书还是很有必要的!

 回复 引用 查看   
#15楼2010-05-01 19:09 | assiwe      
@
第一,我不知道你英语怎么样,不过显然你的汉语水平不怎么样."书只不过是书,把看过一本书当成在某个领域的必要条件只能说明你很弱" 不管是字面意思或明喻或暗喻,哪个字哪个词能让你得出读书没用的结论来?
第二,3大著作就是必要条件,真不知道何种逻辑能让你自信满满地说出这种话.
首先:科学和艺术不同,艺术没有进退,科学却可以实实在在的进步.科学上的任何观念都会被发展,所以科学书籍很快就会因为知识陈旧而落伍.就以你推崇的设计模式来说吧(我在七八年前读的,所以有些记忆可能不太准确),所有的模式都没有考虑到并发,有些模式在后来被证明并不实用,有些模式在现代的语言里已经被直接支持,诸如MVC,mapreduce等现在常用的模式当时还不存在。读这样一本书的益处远不如读最近一些能够反映模式的发展的书。因为是经典,开山之作所以其中知识要比后人的书更有价值的观点是荒谬的;“即使知识有些陈旧,但作者的思想更重要”的说法更是可笑:后人充分研究前人之后,其思想当然也是在前人的基础上更加开阔并且更适合现代。或者如果你要辩作者是天才,他的思想无论如何平凡的后人都无法领悟。那么请问:同样身为一介凡夫的你,究竟凭什么可以领悟别人呕心沥血都无法领悟的思想?
其次,其他书籍就不能讲解这些知识?我从学校的教材而不是Applying UML and Patterns(这本书我还真没看过)里学习UML,难道我画的用例图就不是用例图了?如果我看得是其他设计模式的书,我写的单例难道会返回多个实例吗?


 回复 引用 查看   
#16楼2010-05-01 21:36 |       
@assiwe

第一:“书只不过是书”这已经可以说明你认为书不过如此。和读书无用论的集合有交集。

第二:设计模式、重构、UML 你到底有没有读过?

四人帮写的设计模式是用c++去描述的,不知道你是否了解?还有最重要一点,在设计模式开篇第一段话就说明了本书的价值是:设计模式!!!!Design Pattern!!!而不是具体的23个模式。这个你7、8年前又是否知道?

what is design pattern? 先把四人帮对这个词的定义搞清楚了。那么剩下23个pattern就知道是什么了,无非就是多态+继承。

重构不知道你又看过没有,martin fowler的英文版。里面基本上对所有技术人员的内功都有了描述。到了今天,还没有看到超越refatoring的书,基本上都被涵盖了。

至于UML,关键不是在用例图!!!而是在设计!!!你画的是用例,但是是好的设计吗?这个麻烦再去看看书。

最后,你有怎么知道我是一介凡人?
引用同样身为一介凡夫的你,究竟凭什么可以领悟别人呕心沥血都无法领悟的思想?

 回复 引用 查看   
#17楼2010-05-01 21:46 |       
@assiwe

我估计你也没时间去看这三本书,我就顺便把他们精髓说说算了。

四人帮在Design pattern里面,首先解释的是:
设计模式是一种人与人交流的代号,通过pattern,能够让工程师快速掌握代码的架构。本文23个pattern只是他们日常生活中经常用的。希望阅读此书的人,能够扩展出自己的设计模式。
因此,design pattern的精髓在于,让我们如何去设计自己的设计模式,而不是去掌握23个pattern。虽然这23个pattern很多都写的不错。


refactoring 解释的是如何提高代码的健壮性、还有编程习惯等等,和code complete有点像,不过code complete更加具体到技术,范围更广。

UML一书,整本书围绕着几个实际的案例展开,同样,目的是让我们学会用UML去思考,而不是让我们知道什么是用例、什么是actor,一大堆破烂箭头、曲线折线是什么意思。

基本上看,你读书,仅在于What, 而我说的书在于How。