高博简介:1983年生于安徽宿州,书香门第。87年开始学习算法语言,并掌握Algo- 60在709/TQ-16大型机上的纸带实现。小学时接触到内存为64K的学习机,查阅手册自编手柄驱动以自娱。中学时参加数次省级、国家级信息学竞赛, 成绩乏善可陈,参与兴致不减也。其间阅读如饥似渴,对算法设计和工程编码打磨不辍,同时发表文字数十万字,后考入上海交大专修计算机。毕业后,在微软中国 Windows Live Mail项目组工作,负责Mail Rendering/Calendar的部分编码和测试工作,在惠普中国负责大中华区的笔记本软件质量保证项目。23岁末,辞职创业,成立上海说说螺软件 技术有限公司(http://www.sonoro.cn)并出任总经理,立志用新思想、新技术打造新一代的即时通讯产品,改变即时通讯产品的现状。
专长:C/C++、HTML/CSS/Javascript、基础算法、软件工程、软件项目管理、质量控制
兴趣:语言学、天文学、数学、神学、四书五经、写作、翻译、看电影、听轻音乐、玩魔兽世界、简单木工、慢跑
现在去书店,尽管还是经常去C/C++柜台附近转悠,但发现自己和大学的时候有一个很相反的地方,那就是彼时钱袋很空,好书却不少;而现在却是买书的银子再也不缺了,好书却只能沙里淘金似的找到一两本,经常转了半天却空手而归。
不过好书总算还是有一书柜,现在已经从学问人沦为生意人,经常夜里枕书而眠,又枉度数载,总算还有些心得,这里还是拿出来谈谈。
一、静下心来 摸清基本概念
在参与编码实践后,会遇到很多十分唯象的编码习惯。很多朋友在微软,在Intel、在 Autodesk工作了几年,回来我们一谈,却发现他们养成了一些进去之前没有的坏毛病——Effective C++的教导很多都忘记了!我忍不住批评了一下,他们就搬出“项目规范”啦,甚至“PM就是这样写的”啦。实际上呢?谁在项目压力之下都要靠本能编码的, 之所以要不停地看书,就是为了本能出来的东西能够地道一些。这句话来自《程序设计实践》,是Kernighan的箴言。
所以,我的建议是,无论在具体项目中纠缠了多久,还是应该时不时地静心来读读一些讲述基本概 念、基本理论的东西。这也就是我说的不会过时的东西,只要处理器的基本结构没有变,它就不会变。当然我得承认C++是一门不断演化着的语言,不过特别明显 的是它的演化更像是板块漂移而不是火山喷发。C++那个98年的标准明显绝大部分还继续适用,并且是现今所有的编译器设计时必然参考的指南。更进一步地 说,编程的技术——这种和语言无关的东西,比如如何写测试用例、如何调试,是应该总是时时记念在心的。这部分的东西十分难写,因为写不好就让人觉得特别无 味,好像是写地球人都知道的东西,能把这部分写出味道来,是很伟大的。
二、读一些深入的书 充分“吃透”C++
C++有很多断面(facet),难以一言以蔽之。Bjarne Stroustrup的两本书应该说是C++语言最权威的参考了,但是C++标准的作者却是Andrew Koenig。这至少说明一个问题,亦即C++的创始人也不能说就完全理解了这个语言的所有方面。就像卓别林在模仿卓别林的比赛上不能夺冠一样, Stroustrup在C++方面的理解,很可能不及一些他的某些同事(依我看,Herb Sutter该算一个)。
即使要了解C++的某一个断面,也需要投入相当的时间和精力。但如果只了解C++的某一个断 面,注定会像摸象的盲人一样,浪费了C++的许多重要的可资利用的特性。或是写出的代码佶屈聱牙,能够通过编译,却会有很多运行时的隐患(内存泄漏是最常 见的问题,但并不是最糟糕的)。或是活像把C++当作一门外语来表达,用case语句和类型判断来做一个虚函数应该做的事等等。
应该对C++的基础部分投入最大的精力,这是怎么强调也不为过的。而基础部分包括的内容却是 难以界定的,char和int的关系算不算呢?你真的会用浮点型来准确表达你的计算了吗?对你来说,“class”的意义是不是和默认为private的 struct差不多?可以说每个C++语言核心元素后面都有一大篇的故事,你能娓娓道来其中多少?我经常会有小学没毕业的感觉,你也一样吗? [Page]
然而现实要求我们这些所谓的大专院校的毕业生们,天之骄子们能够迅速地、干净利落地拿起C+ +的炊具烹出合乎客户胃口的小鲜。我们别无选择,我们应该拿出时间来学习,应该读一些深入的书,应该了解一些数学,应该了解一些那些狗屁培训班的白痴教员 们不懂的东西,以对得起我们的父母从血汗钱里拿出的学费,以对得起我们肩上所担负的拯救中国的软件产业乃至计算机产业的责任,我们没有理由止步,我们没有 资格掉链子。
我得承认C++的书里,有一些十分晦涩难懂,有一些在一个主题里挖得非常深入。但这些书也是 我们成长的最好的营养,也是我们作为一个严肃的工程师和研究者的入门钥匙。它们给了我们对本应重视却粗心略过的问题耐心的却并非浅薄的提醒和解释,它们的 作者在早年就经过了我们今天才走过的荆棘,并为我们一一标上了“禁止通行”和“小心地滑”的告示。也许我们在把它们读过多遍以后,觉得自己已经掌握了很 多,甚至觉得它们开始像母亲的唠叨一样过时了,但实际上呢?我们还是经常闯祸,有时会头破血流,让我们“听妈妈的话”,养成读这些书的好习惯吧,尽管它们 有时还真不是一遍可以读懂的!还有,别以为读了一遍你觉得懂了就是真懂了!
推荐:
大规模C++程序设计,John Lakos
深度探索C++对象模型,Stanley B. Lippman
Exceptional C++,Herb Sutter
More Exceptional C++,Herb Sutter
Exceptional C++ Style,Herb Sutter
Effective STL,Scott Meyers
具体数学,Ronald L. Graham、Donald E. Knuth & Oren Patashnik
C++设计新思维,Andrei Alexandrescu
C++语言的设计和演化,Bjarne Stroustrup
C++程序设计语言,Bjarne Stroustrup
C++语言标准,98版,C++标准委员会
国内绝版的《Dr. Dobb》杂志,散文都写得极好,我有一些
三、要选择好的作者、译者和出版社