算法为王--正本溯源系列之一

以前曾旁观过一些软件工程师们争论, 当然也包括很多大学里的学生和朋友, 常见的一种是为谁的技术高, 谁懂的技术深刻较劲, C++的朋友很看不起用VB, 精通操作系统的人看不起精通Excel的人, 精通编译原理的人看不起培训Dot Net, UNIX的看不起Windows编程的人, 程序员相轻, 比文人更甚, 这样歧视的话语和语调流行很广. 可能有老师或者所谓资深专家对一个初学者这样说,你要想成为高手, 必须要扎实的学好操作系统,编译原理, 数据结构等等一大堆的科目.

我在想 , 公司里有一个文员 , 每天和 Excel 报表打交道 , 非常的熟悉 , 并且很聪明 , VB Script 写了很多自动化的功能,使自己的工作效率成倍的增长 , 这样的人也许不懂计算机的原理 , 不懂什么操作系统, c++ 语言等,你能说她很低级吗 ? 你能不为她而投去敬佩的目光吗 ? 她和精通操作系统的你区别有多大 ? 天上与地下 , 你说,那好,我们现在就谈论这个问题 .
计算机原理 , 操作系统 , 编译原理 , 编程语言这些东西 , 说到底其实都是知识 , “知其然”是知识 , “知其所以然”也是知识 . 这些书本上的知识是前人智慧的结晶 , 里面充斥着天才的思想和绝妙的算法 , 是很长时间内科学家们不断的创新和试错 , 才能得到今天的地步 , 典型的一个例子是操作系统,一个控制硬件系统的软件,里面每一个章节都是算法或者逻辑的汇总 , 每一页枯燥的文字背后的目的就是介绍一个算法 , 这些算法慢慢成为思想 , 成为体系结构 , 然后成为规则 , 成为你必须记忆的知识 . 你学习的时候感觉很难掌握 , 是啊,你一节课学习的东西其实是前人几个月甚至几年想到的解决办法 , 你如果要切实的理解,就必须顺着计算机科技发展的历史 , 每一阶段出现的困难和怎么去解决它这个思路的角度去理解 .
这些课程你学的很好,都知道是怎么回事了,它只是表明你知道了前辈们的劳动成果 , 也学会了很多成熟的思维和算法 , 给自己写程序很多的启发 , 其他并没有多大的意义 , 它和公司里的文员精通 Excel 的意义一样 , 你的优越感只是你自己幻想的 .
知识和能力不一样 , 懂的知识多 , 不一定能力强 , 就如你计算机基础课学的很好,你也可能写出很烂的程序 . 在软件领域 , 能力就是你的逻辑思维能力 , 软件的本质就是逻辑 , 你构建的程序 , 反映了你的思维水平 . 从某种意义上说,逻辑思维能力强的就意味着聪明 , 微软和谷歌等公司只招收最聪明的员工 , 也是很有道理的 .
公司里的文员很聪明 , Excel 玩的烂熟 , 做事有条理和规则 , 她如果从事软件开发工作,我相信她会成为优秀的程序员 ! 更重要的是 , 她能让她的工作效率成倍提高 , 这就是她的价值 , 在老板眼里 , 她和程序员的价值是一样的 .
程序员的价值在于构建一个工具或者应用 , 是否深得客户满意 , 是否稳定可靠 , 是否帮助客户产生商业价值 , 没有客户的认可 , 你所构建的就是垃圾 , 你所自豪的高深知识也没有用处 , 因为任何一个智力正常的人都可以通过书本获得 .
当然了 , 如果你觉得你肚里的知识书本上没有,别人也没想到 , 完全是你自主创新的,那我们就会真的敬佩你了,老大 , ! 不要浪费时间了,赶快去发表论文,申请专利吧 !
业内很多人把算法理解得比较狭窄 , 其实算法并不单单指教材上的排序 , 二叉树等等 , 我们可以把算法的涵义再扩大一点 , 算法就是解决一个问题的最佳实现方法 . 这样一来 , 我们平时大多的代码就与算法联系上了 , 无论是多么简单的问题 , 比如保存数据到数据库 , 比如界面的规划等等 , 每人写的代码都有区别 , 你面前的代码就是你的算法 , 你的逻辑思维的体现 . 这种逻辑思维就决定着产品的优秀与否 .
所以我们觉得如果文员小姑娘把自己的做法最优化了 , 她就是一个算法高手 , 触摸到了软件的核心 , 尽管她根本不懂 Excel 下面的操作系统是什么 , 也不懂为什么 Excel 会跑在这个机器里 . 相反我也遇到过一些程序员 , 绕了好多的圈子 , 写了好多的代码去实现一个本来清晰简单的任务 , 尽管你懂了很多 , 我们依然不认为你是一个合格的软件工程师 .
( 后面两段是加上去的 , 怕我的意思被误解 . 本来是想把计算机基础学科里的算法给列举和评论一下 , 工作量比较大 , 还是算了吧 )

你可能感兴趣的:(编程,算法,Excel,vb,VB.NET)