初学编程的朋友,总觉得写程序是件单纯的事情:知道如何使用一种语言,熟悉一个开发环境,了解系统的编程接口(API)就已经能够成为一个合格的程序员 了。在我刚刚接触编程学习的时候,我也是这么认为的。这种认识不是没有根据的。在我有这样的认识的时候,我已经会用basic写一些小程序,甚至照葫芦画 瓢写了一些游戏动画界面了。在上个世纪末所谓的计算机的“游侠”时代,这个看法是有其合理性的;但是今天回过头来看,这些最初的认识实在是肤浅的。今天软 件开发已经成为一个成熟的行业,因此如果想在这个行业中生存,核心竞争力是必须的。学会一种语言,熟悉一个开发环境,掌握API的程序员永远只能位于这个 大厦的最下层,仅仅比程编程爱好者强一些。如果想摆脱这个局面,就得知道哪里才是这个行业的核心。
软件行业,就其功能而言就是一个工具行当,和会开车的司机,会开机器的工人没有什么区别。因此仅仅作为工具的操作者, 一个程序员是不值钱的,因为他只是一个更为高级的工具。一个有身价的程序员他之所以值钱,是在于他的创造力。程序员的创造力并不在于会画个界面,会用开发 环境什么;而在于他对计算机这个行当的根本的掌握。 计算机是应用数学和电子工程上派生出来的一个果子。因此程序员的核心竞争力在对数学和硬件知识的掌握。因此这个世界上只有两种程序员永远不会待业,那就是 算法高手和硬件高手。 但是对于软件专业出身的程序员来说, 算法是最核心的竞争力。我和很多程序员相处过,交流过。他们中的大多数都有对失业的担心,即便是已经在大公司从业了很多年的程序员: 软件技术发展日新月异,没人能永远跟住技术发展的脚步,总有会被淘汰的时候。 但是那些着眼于算法的程序员大多没有这种忧虑,年龄的增长只能让他们更加有经验,变得更吃香。我认识的一个做图像处理的朋友,写出来的程序一点可读性都没 有,而且很不规范,动不动就crash了。但是老板无论换谁,都不会换他,因为他的算法性能高,能实现别人不能实现的图像检测能力。而那些帮他改程序,写 注释的“职业”程序员, 尽管写出来的程序正规工整,但是工资涨不了多少,而且还得担心哪天就开路了。 相比之下, 可见一斑。
因此,学习编程的朋友们,不要去太过追求和写代码相关的能力,抱着本MFC手册当宝典了,而是应该耐心下来关注最基础的数据结构和算法,把他们搞透玩熟。 这是基础中的基础,核心中的核心;没有这些,以后的会很难得到提高。而且这些基础可能在以后的十几二十年里面,你都不会再会有时间和精力去重新扎扎实实学 一遍了。
此外,我还想补充一点。是不是这么说软件工程就没必要去学了? 软件工程是计算机科学中比较偏向工程方面的一个比较新的分支,对于开发而言也是至关重要。因此这个肯定是要学,而且要学好,此外在工程上,程序框架,类库 的掌握,都是必须的知识。 但是掌握这些知识只能让人成为一个合格或者出色的工匠, 但是永远成为不了一个有创造力的大师。这个社会上,工匠成千上万,多你一个不多,缺你一个不少;但是大师却是寥寥无几。在计算机行业,更是如此。