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