注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

刘邓

每天收获一点点-目标:富足

 
 
 

日志

 
 

论程序员最重要的从业素质  

2012-05-16 23:44:16|  分类: 思考类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

网上有很多关于程序员到底学什么最重要的帖子。大家的回答也是各不相同,下面是我归结的几个主流方向:

1.语言学派,全面掌握编程语言的各种特性:列举出各种语言的各种炫酷特性。

2.算法学派,算法为王,努力学习各种算法:基础的排序就不说了,什么贪心算法,动态规划,BFSDFS都在掌握之列,更有牛者研究人工智能遗传算法,图形学各种插值求精算法等等。

3.数据学派,数据结构为解决问题的关键:学习数据结构,队列,向量,链表,二叉树,红黑树,哈希表等等

4.上面三种的集合学派:强调2种组合或者三者都重要

5.思维学派:这种人往往是大牛(或者...)经典言论是——语言什么的都是浮云,训练编程思维才是重要。面对下面大家追问何为编程编程思维,也许大牛们都比较忙,能提点一点就不错了,没时间细细分析什么是编程思维。

下面是本人对于程序员(不狭义的指编码人员,包括设计,编码,项目管理等程序设计相关从业人员)最重要的从业“素质”思考

首先摆出论点:程序员最重要的是编程思维(纯个人拙见,大牛轻拍)

依据小时候学到的议论文的标准协作格式下面显然是要摆论据了:

首先阐述个人理解的编程思维:

编程思维的核心是:发现问题,分析问题,解决问题。

大二暑假参加了一个本校的为期20天的研究生入学培训,当时和研究生学长和研究生老师交流,问他们研究生和本科生最大的区别是什么?答曰:发现问题(这个研究生阶段还很难做),分析问题和解决问题的能力。

发现问题,这个层次研究生一般都很难达到,我显然也是无能为力了。下面从分析问题和解决问题着手。

分析问题:

当我们(程序员)拿到一个问题时,第一件事要做的就是分析问题,提出可能的解决方案。解决方案一般情况以软件的形式给出,以软件工程学科对软件的定义为:程序+数据+文档

这里暂且不论文档,而从程序和数据的方面来论述。

程序就是算法对于数据的操作逻辑,将原始数据(输入)按照“客户”需求以各种方式处理以后输出,得到想要的结果。

程序是算法的具体实现,所以说算法很重要,读到这里你是不是想说你这不扯淡嘛,扯回开头了。我要强调的是我说的算法和上面提到的算法不同。算法就是解决问题的方法,小到一个序列查找,大到为核武器爆炸提供模拟。作为一名应用层(只有数学才是系统层)的程序员,我们没必要去纠结各种算法的具体实现,更没必要去自己再去实现它们然后加入到自己的库中,“不要重复造轮子”这个编程界响当当的戒律应该时刻在你的实践中应用,如果你无法控制自己,那么建议你读一读《TAOUP Unix编程艺术》。

这是不是说我们不需要知道这个算法呢?我觉得我们应该关注于现有算法的输入和输出知道这些算法能为我们提供什么样的功能就足够了。

同样的,我要说数据结构也非常重要,但是我反对重复造轮子,学习数据结构不是一遍一遍的去实现自己的链表,树等等数据容器,往往很多语言都为这些容器提供了良好的实现(C++ STL),我们要关注于各种容器的内部组织:链表的插入删除优势,向量的查询优势,set是数学集合的抽象,map是单一键值映射,hashtable是哈希表的组织方式。

我觉得实现自己的容器也是有必要的:一方面能够让我们对容器的内部组织有更好的了解;另一方能让我们对指针和迭代器有更好的认识。

拿到一个问题,首先要将数据进行良好的组织,所谓良好的组织就是把正确的数据放入容器(可能是各种容器的组合,如以map为节点的链表)正确的位置,然后用处理安置好的数据结构得到想要的结果。

基于上述我觉得与其说“数据结构”最重要不如说是“数据组织”最重要。

分析问题结束了,有了如下输出:良好的数据组织和可行的算法描述。

下面进入解决问题阶段:

有了分析问题的输出,相对来说解决问题就“应该”轻松多了,注意引号,就是说理论上是应该轻松愉快了,但是实事往往并非如此,你可能在具体的编码中痛苦的煎熬着,究其原因:

工具不熟练。

解决问题核心是:熟练使用手边工具,即使手边没有,也知道到哪里去拿。

编程语言是工具,调试器是工具,函数库是工具,帮助文档是工具...我们只有熟练使用工具才能够更高效率的创造价值。

古人语:“工欲善其事必先利其器”

还是大二暑假研究生培训,一个老师上课强调说:“我一直强调我的学生要把手边的工具熟悉好,解决问题的时候能随手拿过来用,即使没有现成的工具也要知道到哪里能找到。”深以为然。

另外一则故事是看自一个业内大牛的博客:

一次我去参加摄影班,一个老外老师一直强调摄影最重要的快门和选景,但是真正一个月的时间他都在教我们怎么曝光,怎么调整光圈...因为只有熟练知道了工具怎么使,才能更好的专注于摄影的核心。

我觉得这则故事在编程过程中同样适用:程序设计(算法和数据组织)是编程的核心,编程语言的特性,函数库,调试器等都是我们的强有力工具,我们只有熟悉了这些工具才能更好的集中于编程问题的核心。

总结:

程序员最重要的从业素质是:算法(解决问题的方法),数据组织和工具使用。

  评论这张
 
阅读(330)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017