`
senton
  • 浏览: 205855 次
  • 性别: Icon_minigender_1
  • 来自: 紫禁城
社区版块
存档分类
最新评论

程序员的十层楼 (第六、七层)

阅读更多

程序员的十层楼 (第一、二、三层):
http://blog.sina.com.cn/s/blog_496316280100e998.html
程序员的十层楼 (第四、五层):
http://blog.sina.com.cn/s/blog_496316280100e99d.html
程序员的十层楼 (第六、七层):
http://blog.sina.com.cn/s/blog_496316280100e99g.html
程序员的十层楼 (第八、九层):
http://blog.sina.com.cn/s/blog_496316280100e99m.html
程序员的十层楼 (第十层):
http://blog.sina.com.cn/s/blog_496316280100e99n.html
程序员的十层楼 (第十一层):
http://blog.sina.com.cn/s/blog_496316280100e99q.html 


 

 

6 学者

    当"专家"们想继续往上一层楼爬时,他们几乎一眼就可以看到楼梯的入口,不过令他们吃惊的是,楼梯入口处竖了一道高高的门槛,上面写着"创新"二字。不幸的是,大多数人在爬到第5层楼时已经体能消耗过度,无力翻过这道门槛。

    有少数体能充足者,可以轻易翻越这道门槛,但是并不意味着体力消耗过度者就无法翻越,因为你只是暂时还没有掌握恢复体能的方法而已,当掌握了恢复体能的方法,将体能恢复后,你就可以轻易地翻越这道门槛了。

    怎么才能将体能恢复呢?我们的老祖宗"孔子"早就教导过我们"温故而知新",在英文里,研究的单词是"research",其前缀"re" 和"search"分别是什么意思不用我解释吧。或许有些人觉得"温故而知新"和"research"有些抽象,不好理解,我再给打个简单的比方,比如你在爬一座高山,爬了半天,中途体力不支,怎么恢复体力呢?自然是休息一下,重新进食一些食物,体力很快就可以得到恢复。

    由此可知,对体能消耗过度者,休息+重新进食通常是恢复体能的最佳选择。可惜的是,国内的老板们并不懂得这点,他们的公司里不仅连正常国家规定的休息时间都不给足,有些公司甚至有员工"过劳死"出现。所以国内能翻越"创新"这道门槛的人是"少之又少",和西方比起来估计是数量级的差别。

    再说说重新进食的问题,这个重新进食是有讲究的,需要进食一些基础性易消化的简单食物,不能进食山珍海味级的复杂食物,否则很难快速吸收。以查找为例,并不是去天天盯着那些复杂的查找结构和算法进行研究,你需要做的是将二分查找、哈希查找、普通二叉树查找等基础性的知识好好地复习几遍。

    以哈希查找为例,首先你需要去将各种冲突解决方法如链式结构、二次哈希等编写一遍,再试试不同种类的哈希函数,然后还需要试试在硬盘中如何实现哈希查找,并考虑数据从硬盘读到内存后,如何组织硬盘中的数据才能快速地在内存中构建出哈希表来,...,这样你可能需要将一个哈希表写上十几个不同的版本,并比较各个版本的性能、功能方面的区别和适用范围。

    总之,对任何一种简单的东西,你需要考虑各种各样的需求,以需求来驱动研究。最后你将各种最基础性的查找结构和算法都了然于胸后,或许某天你再看其他更复杂的查找算法,或者你在散步时,脑袋里灵光一现,突然间就发现了更好的方法,也就从专家晋升为"学者"了。

    学者所做的事情,通常都是在前人的基础上,进行一些小的优化和改进,例如别人发明了链式基数排序的方法,你第1个发现使用一定的方法,可以用数组替代链表进行基数排序,性能还能得到进一步提高。

    由于学者需要的只是一些小的优化改进,因此中国还是有一定数量的学者。不过和国外的数量比起来,估计少了一个数量级而已。

    也许有人会觉得现在中国许多公司申请专利的数量达到甚至超过西方发达国家了,我们的学者数量应该不会比他们少多少。因此,有必要把专利和这里说的创新的区别解释一下。

    所谓专利者,只要是以前没有的,新的东西,都可以申请专利;甚至是以前有的东西,你把他用到了一个新的领域的产品里去,也可以申请专利。比如你在房子里造一个水泥柱子,只要以前没有人就这件事申请专利,那么你就可以申请专利,并且下次你把水泥柱子挪一个位置,又可以申请一个新的专利;或者你在一个柜子上打上几个孔,下次又把孔的位置改一改,...,均可申请专利。

    这层楼里所说的创新,是指学术层面的创新,是基础研究方面的创新,和专利的概念是完全不同的,难度也是完全不同的。你即使申请了一万个象那种打孔一类的专利,加起来也够不到这层楼里的一个创新。

    当你爬到第6层楼时,你也许会有一种突破极限的快感,因为你终于把那道高高的写着"创新"二字的门槛给翻过去了,实现了"0"的突破。这时,你也许有一种"独上高楼,欲望尽天涯路"的感觉,但是很快你会发现看到的都是比较近的路,远处的路根本看不清楚。如果你还有足够的体力的话,你会想爬到更高一层的楼层去。

7 大师

    从第6层楼爬到第7层楼,并没有多少捷径可走,主要看你有没有足够的能量。你如果能象Hoare一样设计出一个快速排序的算法;或者象Eugene W. Myers一样设计出了一个用编辑图的最短路径模型来解决diff问题的算法;或者象M.J.D. Powell一样提出了一个能够处理非线性规划问题的SQP方法;或者你发现基于比较的排序算法,它的复杂度下界为O(NLogN);或者你发现用栈可以将递归的算法变成非递归的;或者你设计出一个红黑树或者AVL树之类的查找结构;或者你设计出一个象C++或Java一样的语言;或者你发明了 UML;...,你就爬到了第7层,晋升为"大师"了。

    上面举的这些例子中,其中有些人站的楼层比这层高,这里只是为了形象说明而举例他们的某个成就。从上面列出的一些大师的贡献可以看出,成为大师必须要有较大的贡献。首先解决问题必须是比较重要的,其次你要比前辈们在某方面有一个较大的提高,或者你解决的是一个全新的以前没有解决过的问题;最重要的是,主要的思路和方法必须是你自己提供的,不再是在别人的思路基础上进行的优化和改进。

    看了上面这些要求,如果能量不够的话,你也许会觉得有些困难,所以不是每个人都能成为"大师"的。中国软件业里能称得上是"大师"的人,用屈指可数来形容,估计是绰绰有余。值得一提得是,国外的"大师"就象我们的"大牛"一样满天飞的多。

    我把我猜测本国有可能进到这层楼的大师列一下,以起个抛砖引玉的作用。汉王的"手写识别"技术由于是完全保密的,不知道它里面用了什么思想,原创思想占的比重有多少,因此不知道该把它划到这层楼还是更高一层楼去。原山东大学王小云教授破解DES和MD5算法时,用到的方法不知道是不是完全原创的,如果是的话也可进到这层楼来。

    陈景润虽然没有彻底解决哥德巴赫猜想,但他在解决问题时所用的方法是创新的,因此也可以进到这层楼来。当然,如果能彻底解决哥德巴赫猜想,那么可以算到更高的楼层去。

    求伯君和王志东等大牛们,他们在做WPS和表格处理之类的软件时,不知是否有较大的原创算法在里面,如果有的话就算我错把他们划到了大牛层。由于所学有限,不知道国内还有那些人能够得上"大师"的级别,或许有少量做研究的教授、院士们,可以达到这个级别,有知道的不妨回个帖子晾一晾。

    鉴于"大师"这个称号的光环效应,相信有不少人梦想着成为"大师"。或许你看了前面举的一些大师的例子,你会觉得要成为大师非常困难。不妨说一下,现在有一条通往"大师"之路的捷径打开了,那就是多核计算领域,有大量的处女地等待大家去挖掘。

    以前在单核时代开发的各种算法,现在都需要改写成并行的。数据结构与算法、图像处理、数值计算、操作系统、编译器、测试调试等各个领域,都存在大量的机会,可以让你进到这层楼来,甚至有可能让你进到更高一层楼去。
分享到:
评论

相关推荐

    程序员的十层楼

    在IT行业中,程序员被视为一座不断攀升的“十层楼”,每一层都代表了程序员的不同阶段和技能水平。这个概念形象地描绘了程序员的成长路径,激励着我们不断学习和提升自己。下面,我们将详细探讨这十层楼的具体内容,...

    程序员十层境界(很经典)

    ### 程序员十层境界详解 #### 第一境界:初学者 在这个阶段,程序员刚刚踏入编程领域,对各种编程语言如C/C++、Java、JavaScript等有初步的了解。这一阶段的重点在于掌握基本的语法和编程逻辑,能够编写简单的程序...

    程序员道路的十个层次

    第六层:技术专家 技术专家在某一领域有深厚的专业知识,如数据库、网络安全、人工智能等。他们不仅技术精湛,还能为团队提供专业技术指导,解决复杂问题。 第七层:团队 leader 作为团队 leader,他们不仅要精通...

    程序员的十个层次

    #### 第六层:首席技术官(CTO) 作为企业的技术领导者,CTO负责整个公司的技术战略规划与执行。他们不仅要关注技术本身,还要考虑业务需求和技术如何更好地结合以推动企业发展。CTO需要具备卓越的战略规划能力、...

    程序员编程艺术 第一~二十七章集锦与总结

    ### 程序员编程艺术 第一~二十七章集锦与总结 #### 知识点概述 《程序员编程艺术》是由July及其团队——编程艺术室共同创作的一部旨在提升编程技能与解决问题能力的作品集。从2011年4月14日开始创作直至2012年4月3...

    程序员编程艺术第一~二十七章集锦与总结(教你如何编程)(by_July)定稿版.pdf

    - **第六章**:亲和数问题 - **第七章**:求连续子数组的最大和 - **第八章**:从头至尾漫谈虚函数 - **第九章**:闲话链表追赶问题 - **第十章**:如何给10^7个数据量的磁盘文件排序 - **第十一章**:最长...

    程序员简历优化指南.pdf

    在IT行业中,一份精心制作的简历是求职者打开成功之门的关键。对于程序员而言,简历不仅需要展示技术能力,还要突出项目经验、学习能力和...记住,简历是你与潜在雇主的第一接触,务必让它充分展示你的专业性和潜力。

    程序员角度深入理解计算机系统

    ### 知识点一:计算机系统的程序员视角概览 **标题**:“程序员角度深入理解计算机系统” **描述**:“本书名为《计算机系统:程序员视角》(Computer Systems: A Programmer’s Perspective),强调用较少的资源...

    黑马程序员Android视频教程

    ### 黑马程序员Android视频教程知识点解析 #### 一、Android基础概述 - **定义与特点**:Android是一种基于Linux内核(不包括GNU组件)的开源操作系统,主要用于移动设备。它由Google公司及其领导下的开放手机联盟...

    初级程序员几套模拟试题

    - OSI七层模型或TCP/IP四层模型。 - TCP与UDP协议的区别,三次握手和四次挥手过程。 - HTTP和HTTPS协议,请求方法及响应状态码。 7. **数据库基础**: - SQL语句:SELECT、INSERT、UPDATE、DELETE,以及JOIN、...

    中文版Android程序员向导

    #### 第六章:使用命令行工具和Android模拟器 1. **命令行操作**:教授如何使用命令行工具进行项目构建、应用安装和调试,提升开发效率。 2. **模拟器应用**:演示如何在没有真实设备的情况下,使用Android模拟器...

    程序员羊皮卷

    #### 六、程序员与劳动法 - **了解基本权利:** 理解劳动法规的基本条款对于保护自己的权益非常重要。 - **处理劳动纠纷:** 遇到诸如合同违约、工资拖欠等问题时,应寻求法律援助,并按照正规程序解决争议。 ####...

    戏说面向对象程序设计

    第六章工厂不好用了? 第七章用“策略模式”是一种好策略 第八章反射——程序员的快乐! 第九章会修电脑不会修收音机?——聊设计模式原则 第十章三层架构,分层开发 第十一章无熟人难办事?——聊设计模式迪米特...

    算法文档,来看看吧

    [原网页] 结构之法算法之道blog博文集锦第6、第7期CHM文件0积分下载「07.30」 [原网页] 推荐引擎算法学习导论 [原网页] 程序员编程艺术第二十六章:基于给定的文档生成倒排索引(含源码下载) [原网页] 程序员...

Global site tag (gtag.js) - Google Analytics