YH,今天早晨起来。回想昨天,虽然吐槽了C++的各种问题,但给别人打工,还是要靠C++干活吃饭。我对待C++的态度和云风不同,虽然他所说的C++技术的事情我都懂都理解,而我感受到的不是技术问题,而是人生的问题以及人的精力问题,所以我感到还是需要写一篇文章,和你探讨下程序猿的编程人生。
请先容我在这里倚老卖老下。我用C++也用了好久,2000年开始真正开始学C++。之前是为了找工作需要,学了几年的Delphi以及Foxpro。2001年下半年毕业开始,感受到C++的强大,我开始买大量的C++的书去学习。
朋友周爱民对我的评价就是:你是个学院派的。你最适合去大学里搞研究。
呵呵,可能我是从我父亲那里遗传并继承了他的研究能力。我很喜欢找到一个东西,并深究研究到我认为透了,我才去用。这个在其他地方也同样体现。
在学C++之前,我也学了2~3年的Delphi,而且毕业设计都是Delphi做的。我去面试的是Delphi的工作,但业余时间,看C++的书,写一些C++的代码练手,后面时机成熟了,就很轻松的上手写代码。
但我那堪比猫的好奇心。让我总是在不停的被C++的“特性”所干扰。因为C++提供的特色太多了。模板,模板库。虚拟、虚拟、再虚拟的东西。各种抽象、抽象、再抽象的方式。这里就不逐一叙述各种C++概念了。
而这些有趣的东西。会让我的精力一次又一次的转到研究这些C++的有趣的设计上。但多年以后回过头来看,这些东西尽管设计的确实很不错,但占你人生的代码量而言,大概有1%到10%左右不等,具体看人的工作性质。而这种代码,也会被其他方式替换,只不过C++提供的是比较易懂的机制。而不管编写底层库,还是编写顶层实现代码。最多的还是业务代码,而这种业务代码,就是基础逻辑代码。任何计算机语言都提供的那类基础功能。
在十来年前,流行过一套小书,其中有一本书叫《编程之道》。里面充满了道家的思想,很多地方甚至就是把老子、庄子的话稍微改一下就成了一种很神秘的话, 呈现在你面前。多年来,我一直时不时的看看这本书,感悟下书里面所说的道理。
一个初学者被要求编写一个财务软件。
他疯狂地工作了很多天,但他的主管检视他的程序时发现,它写了一个编辑嚣,一个图形程序集,和人工智能的界面,但是看不到任何跟财务有关的东西。
主管要求解释时,程序员被激怒了:“你太没耐心了,我会在最后写财务的部分。”
起初看这个小故事,并没有感受到作者到底是在写什么。工作以后才明白,这个程序猿一开始就没有考虑核心的财务功能代码,而是写了周边的代码。要说周边代码没用吗?其实也是有用的,但那不是核心功能。当业务真正投放使用之后,这些代码的使用过程中,会被反复推敲修改的,如果最初就没有思路去思考,那结果必定是一团糟。而程序猿就这么轻易被那些“花哨”,看上去很好很强大的东西给吸引了,而忽略了最核心的需求。
而C++正是让你看到,这个不错,可以用哦。那个也不错,试试看?结果呢?短期来说,有可能真正的工作可能耽误了。长期来说,积累的C++“使用经验”,对编程水平的提高帮助几乎微乎其微。
现在信息量如此之巨大,书籍如此多,网上的新兴概念,新的资料还在不停的生产。你或许一辈子可能都看不完的东西。
《C++标准程序库》和《代码大全》是差不多一样厚的。两本书摆在你面前你是选择哪本呢?《深入理解计算机系统》和《C++ Primer》也是差不多一样厚的,你是选择哪一本呢?
当你可能懂得如何谨慎的对待C++标准库的时候,boost库又在你的面前了,loki之类的库都逐一出现在你面前。都是海量的信息轰炸着你的头脑。还有巨额的各类引擎代码。
C++可以用,用了这么长时间。我深知它仅仅是一门语言而已。但要阻止被各种所谓的“设计”给迷惑。使用他提供的一些基本功能。
去研究C++的周边的时间。你可以研究下计算机结构基础,基本的虚拟机原理,完善你的编辑器,研究下工具链,研究下各种有趣的算法,看下Lua或者Python的源码,值得研究的东西太多了。而这辈子精力太有限了。
因为这些不仅仅是属于C++的东西,而是属于“编程”这个大范畴的东西,而很多在现代计算机出现之前就存在,这种不变的东西,才会提高你的编程能力。把精力视角扩大,多专注与编程,多专注于你所在行业的业务需求。这才能提高你的工作能力。甚至可以和两三好友去玩也会提高你的社交能力。
可以用C++,但不要去研究C++
最后,我再用一段《编程之道》的小故事做个总结。
有一天编程大师碰见了一个正玩掌上游戏机的编程新手,他说:“给我看一下?”
新手把游戏机递给大师,“我看到上面说明了三种难度的玩法:容易,中等,高难”,大师说,“但是每个这样的游戏机都有另外一种玩法,此时游戏机即不是想着怎么赢你,也不是怎么被你赢。”
“那么请问大师”,初学者说,“这种玩法到底是怎样玩的呢?”
大师把游戏机摔到地下然后用脚踩碎它,突然初学者明白了。