何必言精通——十年杂感 兼谈其它

 

30虚岁了。这一、两年,有事没事之中口中经常念着李商隐那首《锦瑟》:

锦瑟无端五十弦,一弦一柱思华年。庄生晓梦迷蝴蝶;望帝春心托杜鹃。沧海月明珠有泪;蓝田日暖玉生烟。此情可待成追忆,只是当时已惘然。

此情可待成追忆,只是当时已惘然。回首过去的十年,堪称快意,十年里,领略了很多领域:新材料、写作、技术管理、企业分析、软件开发等等,都留下了不深不浅的脚印:材料学是我本来的专业,很顺利的拿到硕士学位;其它成绩也不平凡,小说发表过,书籍出版过,项目主持过,公司成立过,可算丰硕。而今回想,却只有一个词:浮躁。

以开发而言,起始于1997mud程序开发,起步于网络浪潮阶段,asp呵呵。后来自然就过度到asp.netC#。随着项目需要,C++javaTclPython……用过的也不少。也曾经痴迷过模式,那段时间买书都是从amazon上买,一个月几千的书钱。而今回头看,大浪淘沙,所余有价值东西不多,却忽略了很多重要的东西,可见当年的浮躁。

一、先谈忽略的东西。

1)英语。

十年前,那时SQL Server 还是 7.0,纯英文的,找不到一个汉字。有一天,我要备份数据库,一看上面选项:Backup……Restore……。当时英语是三级左右,不认识啊,我就猜:Store不是存储吗,Restore……再存储不就是备份吗?up不是起来吗,Backup不就是把后面的东西拎上来吗?于是,Restore被我理解成了备份,Backup被我理解成了恢复。结果:几天的数据顿时灰飞烟灭。

英语的重要性怎么强调都不过分。第一点,就开发而言,大部分技术文档都是英文的,读英文能够更加精确的掌握API,要尽可能的看英文文档而不是翻译过来的文档。第二点,就需求而言,一美元在老外眼中和一人民币在我们心中的地位差不多,好几倍的差距啊,英语好能够更好的和他们沟通,赚这些票票。

哎,可怜我的哑巴英语。

2)数学

只能以“当时已惘然”来形容。

微积分、线性代数、概率论/随机数学、数值分析这些大学数学的重头戏,当初年少轻狂,以为今后不会再用到就没怎么认真学。

随机数学是后来最先用到的,做论文时,我用基本的随机数学工具结合一系列简单的表征巧妙的得到了材料的一些特性,于此体会到数学工具的威力。一年后,做离散事件仿真,也是随机数学大放异彩。

最近在CSDN上看到了一个图像识别项目,很快的我就做出原型出来,到后来,识别率却上不去。要让识别率上去,需要用到神经网络、Hough变换等数学工具。《模式分类》一书看了大半,就把在我大脑中昏睡十年的微积分、线性代数、数值分析都唤醒了。晕倒,什么神经网络,搞过来搞过去还不就是求极值,当初大学的《数值分析》换了个马甲而已。

3)执着

擅长十件事情不如只擅长一件事情。回想十年,我的另一大失策便是擅长的事情太多。别人只用把精力放在一件事情之上,我却需要将它放在多件事情之上。当初大家都处于差不多同一起跑线上,而今,大学同学差不多已步入职业生涯的上升期,坚持创业的狐朋狗友也有小成,坚持写作的狐朋狗友也成了知名作家,而多条腿走路的我却离起点并不太远。用军事话语说,就是犯了分兵之大忌。

4)规范

学习规范是最廉价的学习方式,关注于工具,忽略规范往往会付出很大的成本。以我自身的例子来说,我开发了很长时间的Spider,却没有阅读过Html规范,最近将html 1.1规范打印出来再看,发现自己之前对html有很多的误解,有很多bug源于这些误解。

从北京回到我现在的城市,关于.net的电脑书,我只带了一本,就是《.net程序设计规范》,而在这之前,规范却是我一直忽略的。

二、再谈体会。

1)价值

无论做什么事情,脑中都要有这个词——价值。没有价值的东西,易变,不易把握,不易长久。追逐技术,需要考虑价值问题。我们是为了实现价值去学习技术,而不是单纯的为了技术而技术。

技术的价值体现在:

·解决问题。如,实现一个功能。

·提高生产力。如,实现同样的功能,引入框架可以缩短开发周期,提高质量。

·提供良好的产品或体验。如,Ajax

能够有效的解决问题的人是领域专家。能够提供足够的生产力的人是技术专家。能够提供良好的产品或体验的人是产品专家。

可以经常问问自己:

a)有哪些待解决的问题呢?

技术的发展是对生活的解构与重构。计算机技术的发展成功的解构与重构了印刷术,避孕技术的发展成功实现了做爱与生殖的分离。

我们能否通过技术将美味与美味的载体分离呢?能否有可编程美味芯片呢?

这个问题很有意思,不过太大了,在短期十年二十年可能都不会实现。

换个小点的。以股市为例。股民的预期对股市价格有很大影响,而股民的舆论可以在某些方面反映股民的预期,互联网是一个很大的舆论平台。如果能够发现股市舆论和未来股价之间的关联,并且通过网络舆论监测和数据挖掘来测量股民的舆论,这样的系统是有价值的。

b)有哪些提高生产力的方法呢?

影响软件生产力的有几个因素,人力是一个因素,开发过程是一个因素,技术的基础设施是一个因素,需要综合考虑来进行技术决策,而并非盲目的学习新技术,学习新方法。

c)如何提高用户体验?

有时候,我们拿到新工具了,却往往忘了我们为什么要用该工具。以ajax为例,ajax通常能够提高用户体验,但它也能够破坏用户体验。比如,我的gmail信箱经常登陆不上去,必需清空历史数据,清空里面的js缓存才能够正常登录。再比如,前一段时间的china-pub搜索功能80%情况下用不了。这样,就违背了它本欲实现的价值。

顺便骂一下csdn,怎么看怎么像杂货铺。

技术这东东只能是媒介,可能变动很快,但是价值却很少发生变化,就如男男女女,花里胡哨的,无非就那点事情,换换马甲而已。

2)竞争力

嘿嘿,有价值的东西未必有竞争力,比如,水,生命中不可缺少,却是超级的便宜。无它,易得而已。同质的东西多了,竞争力就下来了。

就做技术的人来说,竞争力主要集中于:

·深入    一件事情做得比其他人都好,弄的透彻,自然就具有竞争力。走这条路需要的是耐心。

·细分 把一件事情做出花样出来,在满足客户基本需求基础之上,同时相比其它竞争者,能够更好的满足客户的其它需求。走这条路需要的是对需求的研究和掌握。

·前瞻 在未来的事情发生之前,便弄一些东东等在那里。放眼天下:舍我其谁。这条路需要的是洞察力和毅力,还有很大的运气成分。

最近在网上接活,有个很有意思的发现。

感觉活分两种:

一种活你干的时间越长,单位时间里得到的报酬越少,因为这些活不急又具备很强的竞争性,发布者在心理上是按着市场价进行定位的。

一种活你干的时间越短,你的总报酬就越多,因为这些活又急,能做的人又不多,或者能做的人虽多,但是能在短时间内做出来的人极少。你做的越快,得的钱越多。发布者根据心理价进行定位的。

你适合干哪种活呢?作为技术人员,我们需要经常思考自己的竞争力。

3)静下心来时看看毛选

三、对一些技术的评价(个人立场)

a.Net 3.5/VS 2008

感觉最爽的是属性那一块不用写具体的get, set了,使代码一下子清洁了很多。

扩展方法是个好礼物:它可以使我们的关注点更好的集中在对象上。没有它,之前要写很多很多helper类,而到具体用时,要去仔细去翻这些helper类,浪费时间,浪费脑细胞。尤其是和ActiveRecord结合在一起用真是顺畅啊。

Linq:怎么看怎么像马甲。目前还没发现需要用到它的地方。

LambdaC#下不能自动推导类型,用处仅限于节省点语句,解决一个问题(少写语句)的同时又引入新问题(多掌握一点语法),毛用没有。

Silverlight:没兴趣。

SOA:没兴趣。

bOO

DP:忘记差不多了,心中只记得一条,就是策略模式。话说编程时间长了,这玩意就是水一样的存在,写代码自然而然就那样子了。反而是OO设计的那几条准则是时间越久,记忆越深刻,体会越多。

UML:不做大项目的话,毛用没有。

四、我心目中的优秀程序员:

1)有1-2个自己擅长的领域。比如Web前端开发,就得擅长htmlcssjs那些东东。偏业务的,就得擅长需求分析、建模、沟通。

2)掌握一种适合自己又能被团队/公司/客户接受的软件开发过程。

3)熟悉相关的技术基础设施(基本工具,基本框架)

posted @ 2008-06-24 07:04 xiaotie 阅读(3892) 评论(51)  编辑 收藏 网摘 所属分类: [ 1 ]兽族的荣耀

  回复  引用  查看    
#1楼2008-06-24 07:31 | 新程金锣      
此情可待成追忆,只是当时已惘然。

呵呵,过几年再体会。

  回复  引用  查看    
#2楼2008-06-24 08:13 | 路缘      
谢谢博主的分享,擅长十件事情不如只擅长一件事情。真是感同身受,
我过去几年里学会了太多的东西,却没一样能拿得出手的,读大一时就开始学C、C++,后来弄过delphi、VB,java,数据库也弄过sqlserver、oracle、sybase等,毕业后做了两年的.net开发,现在又回到了原点,重新拾起C/C++,操作系统、网络通信等大学时学的东西, 唯一不同的是,经过这几年的磕磕碰碰,再回头学这些东西,有不一样的感觉。就当独拿C来讲,当初觉得不过就那么一点内容,现在发现原来有那么多的地方不知道为什么,真的验证了一句话,知道的越多,不懂的越多。有些东西忽略了,看来迟早得还上,最大的损失是时间的代价,只是有的人的代价更大,有的人的代价少些而已。

  回复  引用  查看    
#3楼2008-06-24 08:37 | lbq1221119      
待解决的问题,这个很有想法

lz是个很爱学习的人

  回复  引用  查看    
#4楼2008-06-24 08:49 | Da Vinci      
不错 受用了
做IT都是走着干的 在中国没办法专一行

  回复  引用  查看    
#5楼2008-06-24 08:49 | 扬哥      
我喜欢你这句:“
能够有效的解决问题的人是领域专家。能够提供足够的生产力的人是技术专家。能够提供良好的产品或体验的人是产品专家”

"英语、数学、执着"说得好呀!我自己是数学专业的,但是数学没有学好,英语更是不用说,执着还欠几分,现在只是会写几段基础代码,内疚。。。





  回复  引用  查看    
#6楼2008-06-24 08:52 | ddr888      
说的很实在

  回复  引用  查看    
#7楼2008-06-24 08:55 | 生鱼片      
确实,很多人都忽略了最基础也是最重要的东西
  回复  引用  查看    
#8楼2008-06-24 09:00 | MasterLRC      
感谢分享,读之有易。
  回复  引用  查看    
#9楼2008-06-24 09:00 | 王孟军!      
不错,呵呵
可以说楼主吃的饭相当的多
人生观,价值观,方法论方面都能给以启示
但SOA应该是不错的东东

  回复  引用  查看    
#10楼2008-06-24 09:01 | zmxmiss      
一句话 专注的走一条路
  回复  引用  查看    
#11楼2008-06-24 09:04 | xiao_p      
拜拜牛人!!!
  回复  引用  查看    
#12楼2008-06-24 09:08 | 石牌村夫      
看这样的文章总能让我学到不少的东西
  回复  引用  查看    
#13楼2008-06-24 09:09 | 拉拉叉      
最重要的是要保持你的好奇心,当你对新技术没有好奇心;没有兴趣去研究了,也就不能做技术了
  回复  引用  查看    
#14楼2008-06-24 09:11 | 玉开      
MARK
  回复  引用    
#15楼2008-06-24 09:14 | 黎叔[未注册用户]
做开发也7年了, 感觉用7年刚刚学会了编程
学得杂点有时候也是优点,综合能力强, 但这些领域要相关或者互补,比如js,html,css;
而绝对不能是并行的领域,就象同时学.net和java这样

  回复  引用  查看    
#16楼2008-06-24 09:17 | yushih      
楼主,把你的POSA一套卖给我行不行?反正你已经不需要了。支持一下晚辈吧。
  回复  引用    
#17楼2008-06-24 09:35 | 老四(未登录)[未注册用户]
毕业7年了,和楼主感受差不多。对于那些很时髦的东西,看得比较少。专门在钻一个东西。挺有志同道合的感觉啊。呵呵。

  回复  引用  查看    
#18楼2008-06-24 09:42 | 金色海洋(jyk)      
(1)有1-2个自己擅长的领域。比如Web前端开发,就得擅长html,css,js那些东东。偏业务的,就得擅长需求分析、建模、沟通。

(2)掌握一种适合自己又能被团队/公司/客户接受的软件开发过程。

(3)熟悉相关的技术基础设施(基本工具,基本框架)

这几句很好。

  回复  引用  查看    
#19楼2008-06-24 09:51 | 灰色逻辑      
深有感触啊,不过我才开发了一年,并没有这么深的体会。楼主说的,我似乎都沾了点边
  回复  引用  查看    
#20楼2008-06-24 10:00 | 狼Robot      
学习楼主的经验
  回复  引用  查看    
#21楼2008-06-24 10:14 | Nick Wang      
基础知识很重要,越是做到高级越需要基础知识。
技术以外的东西很重要,技术往往并不是决定性的因素

  回复  引用  查看    
#22楼2008-06-24 10:15 | 丁学      
楼主文采过好,说废话有损本人形象,所以只评价最后技术一部分:

感觉最爽的是属性那一块不用写具体的get, set了,使代码一下子清洁了很多。
--我的感觉恰恰相反,这个是最不重要的特性之一

扩展方法是个好礼物:它可以使我们的关注点更好的集中在对象上。没有它,之前要写很多很多helper类,而到具体用时,要去仔细去翻这些helper类,浪费时间,浪费脑细胞。尤其是和ActiveRecord结合在一起用真是顺畅啊。
--微软自己在MSDN里说不推荐使用,这个可能本来就只为linq所生

Linq:怎么看怎么像马甲。目前还没发现需要用到它的地方。
--这可是个好东西啊,试试就知道了,绝对好东西

Lambda:C#下不能自动推导类型,用处仅限于节省点语句,解决一个问题(少写语句)的同时又引入新问题(多掌握一点语法),毛用没有。
--好像没有楼主理解的如此简单,事关编程思想的回归

Silverlight:没兴趣。
SOA:没兴趣。
--我也没兴趣

  回复  引用  查看    
#23楼2008-06-24 10:22 | LAO DONG      
有时候也需要有很宽的知识面,所有多了解一些其他方面的东西没有坏处。
开发的目的是为了提高生产力,具有使用价值,用什么实现无所谓。

我感悟:别让开发占据了所有生命的一切,多关注一下其他。

  回复  引用  查看    
#24楼2008-06-24 10:24 | 紫色阴影      
Lambda:C#下不能自动推导类型,用处仅限于节省点语句,解决一个问题(少写语句)的同时又引入新问题(多掌握一点语法),毛用没有
-------------------
微软这么聪明,没有用会花力气做?
要理解lambda最好能理解函数式编程,Lisp~

  回复  引用  查看    
#25楼2008-06-24 10:28 | xiao_p      
--引用--------------------------------------------------
紫色阴影: Lambda:C#下不能自动推导类型,用处仅限于节省点语句,解决一个问题(少写语句)的同时又引入新问题(多掌握一点语法),毛用没有
-------------------
微软这么聪明,没有用会花力气做?
要理解lambda最好能理解函数式编程,Lisp~
--------------------------------------------------------

没有自动推到类型的lambda 说是鸡肋,一点也不为过!!!

  回复  引用    
#26楼2008-06-24 10:54 | 西水源头[未注册用户]
聪明人也有犯傻的时候,所谓智者千虑,必有一失

--引用--------------------------------------------------
紫色阴影: Lambda:C#下不能自动推导类型,用处仅限于节省点语句,解决一个问题(少写语句)的同时又引入新问题(多掌握一点语法),毛用没有
-------------------
微软这么聪明,没有用会花力气做?
要理解lambda最好能理解函数式编程,Lisp~
--------------------------------------------------------

  回复  引用  查看    
#27楼2008-06-24 13:11 | 偶卖糕的      
不错,我也搞了7年了,学化学,估计很多专业课和楼主一样,没楼主这么多感概,还有,楼主哇,莫去接啥网络项目了,接项目是浪费时间,浪费生命的行为!
  回复  引用    
#28楼2008-06-24 13:26 | sharpLT[未注册用户]
真是好文章啊!
  回复  引用    
#29楼2008-06-24 14:01 | 廖廖[未注册用户]
--引用-------------------------------------------------我是第一次
来这里,一切都觉得新鲜,这里的人都很有知识和地位,不怕你们笑话,我是来自社会边沿的人,我很羡慕你们!
--------------------------------------------------------

  回复  引用    
#30楼2008-06-24 14:06 | xuyo[未注册用户]
大学的数学才是开始而已。想神机网络那些并没有那么简单。
  回复  引用  查看    
#31楼2008-06-24 14:06 | lovecherry      
linq/silverlight/mvc 这三个我很关注
  回复  引用  查看    
#32楼[楼主]2008-06-24 14:34 | xiaotie      
@yushih
我没买过POSA。POSA几本太贵,当时感觉用处不大。现在觉得,POSA比GOF更有用。不过,现在对这类书已经没啥兴趣了。

@偶卖糕的
得吃饭啊。

@紫色阴影
现在C#的lambda根本没法搞函数式编程,原因就是它不能自动推导类型,必须声明类型,写一两句还可以,再写多的话,那个类型能写死人。

@丁学
对我来说,感觉最有价值的就是那两条。linq我仔细看过,至少目前还没找到需要用它的地方,贸然用的话,引入新语法会导致维护成本变高。用ActiveRecord+扩展方法已经够用了,数据访问差不多就是一行代码,再精简的空间不大。3.5给我最大的感觉是代码量的减少,很多类的代码几乎少了一半,代码更加简洁,结构更加清晰。

  回复  引用  查看    
#33楼2008-06-24 15:20 | U2U      
好文章,关于价值分析,确实很好!
  回复  引用  查看    
#34楼2008-06-24 15:26 | 火无极      
楼主的一句话:
顺便骂一下csdn,怎么看怎么像杂货铺。
深表同意,还是园子好,呵呵

  回复  引用    
#35楼2008-06-24 15:30 | dreammaster[未注册用户]
前10年用技术影响别人,后十年希望能用思想影响别人。
  回复  引用    
#36楼2008-06-24 15:53 | A.Z![未注册用户]
(a).Net 3.5/VS 2008

几个月前牺牲一下午把ms的CCF项目加上后期的一堆杂乱的工程(之前公司请了几个ms在2005搭的POC)移到2008上,然后pm给pm和sa,告诉他们我们正在用VSTS2008,也打算在其他项目一直用下去,理直气壮的把利益罗列的一下,这样这个项目顺理成章的转到2008上,。

Linq:高级编程,相对于基础语法。

Lambda:匿名委托的替代品,没有撒稀奇的。

Silverlight:有一点兴趣,但是不想做一些华丽的UI去满足十几到几百个web用户无知的贪念。

SOA:把eclipse环境搭好,学习java的EJB,玩玩两个公司的web服务套件,这样就可以叫SOA了。

(b)OO

无非是让复杂的代码更复杂,让简单的代码再简单,真理永远在心中,不在口上。



UML:也目睹了老外从VS代码反向贴文档的做法,人的精力是有限的。
不过话说回来,人家的图画的的确很漂亮,理解很透彻,要上一个台阶一定要画出这样图。




  回复  引用  查看    
#37楼2008-06-24 16:54 | CoderZh      
哎呀,同感呐~~
  回复  引用  查看    
#38楼2008-06-24 19:20 | 傻样精英      
后面对那些东西的评论,我觉得楼主还是那个词:浮躁
  回复  引用  查看    
#39楼2008-06-24 19:40 | 皇帝的新装      
仔细看看
  回复  引用  查看    
#40楼2008-06-24 21:43 | Garfield.      
赞一个,如果每隔一段时间都能看到一篇这样的文章是件很幸福的事,谢谢搂主!
  回复  引用  查看    
#41楼2008-06-25 09:52 | yxy      
浮躁,lz说到关键之处。作为中国程序员,浮躁,最大问题。
  回复  引用  查看    
#42楼2008-06-25 10:11 | Sam Lin      
学习~,silverlight这东西有时间我还是要学的
  回复  引用  查看    
#43楼2008-06-25 18:51 | 装配脑袋      
路过,崇拜一下牛人http://www.cnblogs.com/Emoticons/tusiji/20333056.gif" alt="" />
  回复  引用    
#44楼2008-07-08 11:31 | cymo[未注册用户]
好文章啊,很多感慨
转载了

  回复  引用  查看    
#45楼2008-07-25 15:40 | xiao_p      
本来看楼主的另外一个post,结果看到这个链接,自然而然的又跑到这里。

这样的文章真是看一遍有一遍的收获啊。难得的是这样的简单,流畅!一点不繁琐!

  回复  引用    
#46楼2008-07-29 11:10 | Sov[未注册用户]
我也来拜拜牛人~~~
  回复  引用    
#47楼2008-08-13 16:20 | 小卒[未注册用户]
楼主,谢谢分享。
  回复  引用    
#48楼2008-09-30 12:23 | chunbo[未注册用户]
谢谢分享
  回复  引用    
#49楼2008-12-22 11:12 | 释三[未注册用户]
路过,看楼主文章,受益匪浅啊
  回复  引用  查看    
#50楼2009-03-11 21:15 | Lao Cai      
! 啊
楼主的文章写的太好了,句句在理。
钦佩!

  回复  引用  查看    
#51楼2009-04-12 12:52 | Jake.NET      
写得很好,谢谢分享!



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1228598





相关文章:

相关链接: