最近想到的问题比较多。触发事件是一位在中国软件行业摸爬滚打了若干年的资深老
总的一句话。他说:“在中国,做软件,除非你做到NO.1,如果你仅仅是NO.2,你都
将无法生存。”
这个问题放在我身上,就是一个发展方向的问题。以后有没有勇气去做这NO.1的软件
,如果做不到,是不是应该趁早不做。
我们会有选择性的关注一些我们认为对自身有意义的信息,而过滤掉其他纷繁无用的
信息。但是,这样可能使得我们只有一条路,忽略了其他有价值的信息。如果有一天
,这唯一的路走不通了呢?
其实,我想提出的问题是,怎样选择你想学的,然后怎样去学。怎样做项目决策,然
后怎样去实施这个决策。这两个问题可以推广到其他一切问题。
学什么,或者说做什么,这个问题的答案在于你对于某一领域的长期积累和深刻认识
。要冷静下来分析,什么才是有价值的。这个价值除了有潜在的商业利润以外,还应
该有你自身在该方面的各种基础,天赋、积累、灵感、兴趣。但是,前期有可能会不
可避免的花费大量的考察时间。我花了几年。一点一点的慢慢摸索。我天资愚笨,花
的时间比较久。任何一个人,只要静下心来,先广泛了解各种知识,然后再静静思考
自己要走的路是什么。相信,每一个人都能够得到一个让自己满意的答案。
你想学的,是你的兴趣和你的判断决定的。怎样学,是你的方法论决定的。同理,项
目决策是项目决策人的判断,项目实施是程序员的解决之道。思维方式和思维模式决
定了你对哪些方面感兴趣。这份热情是你成功的基石。但是,方法才是决定了你最后
能否成功的关键。
再说下去就流于形式了。打个比方,程序员作项目的时候,往往第一反应是选择用什
么语言,用什么架构。一个很典型的例子就是一个程序员习惯C#,要求实现进程通信
,他第一反应就是使用C#。事实上,C#也是用C++/C的库。如果直接用C++/C反而简单
多了。就是说,解决问题的第一步是清楚这个问题是什么。
在这些项目里面,我获得最大的认识就是,在做事前一定要明确目标。知道对方要的
是什么。否则,结果是,你辛苦了投入了,却得不到任何认可,对方还会认为你浪费
了时间。明确目标的时候,一定要了解到非常细致的程度,方方面面都考虑到。要向
对方反复确认细节。这样能够避免,做了很多又返工的麻烦。那可是很郁闷的,还无
法找人算账,谁让你自己没问清楚呢。
文档化非常重要。因为程序员常常写着写着,就忘了原来的版本是怎么实现的了。这
个相当于以前的一些工作完全被放弃了。而以前的工作的潜在价值也就被彻底埋没了
。做一个优秀的程序员,一定要有备忘性质的技术文档。要经常整理,自己以前写过
的程序,以前钻研过的架构和技术。这样,才能让这些不起眼的小东西,有朝一日发
挥用处。我有次整理电脑,发现一个小程序,结果一跑,跑不通。我的习惯是,没用
的东西一定马上删掉。留下来的程序一定都是编译通过了的。这就奇怪了。我查看源
码,是自己的风格,但是想破了不知道什么时候写的。后来,还调了半天,调通了,
写好注释,才打包保存。无形中浪费了不少时间。
项目和程序要分类整理好,写好注释和readme。你以为你现在脑子里很清楚,过段时
间就什么都不记得了。再现去读源代码,很费事。
我们的思维有很多固定模式,这些模式往往让我们走入误区。有时候你认为你什么都
了解了,只要动手,就可以让问题迎刃而解了,其实不一定。我受到的教训很多。也
在不断学习。总结一句话,就是想清楚了再动手。不要盲目的学习,也不要盲目的做
事。学固然是好,但是既然学,就一定要有收获。不能再浪费生命了.
最后的忠告是,一定要虚心。要承认,无论你有多牛,这个世界上一定还有比你更牛
的人。但是,你绝对是独一无二的。